gibi bir şey yapmak istiyorum. Bununla birlikte, Bean'inizi sürdürdüğünüzde, id alanı bu fasülyede doldurulacak ve bunun için ekstra bir sorgulama yapmanıza gerek kalmadan elde edebilirsiniz. Başka bir deyişle: o kimliği almak için önce
MyEntiry myEnt = new MyEntity(); //the id field is null now
entityManager.persist(myEnt);//the id field is populated in myEnt now
Long id = myEnt.getId();
Ayrıca, EntityManager
nasıl yapılandırıldığına bağlı olarak, aynı zamanda ilk işlem (el) işlemek gerekebilir. Yorumlarınız göre
Güncelleme
Eğer (JPA sürüm 2 kullanıyorsanız), JPA LifeCycle Dinleyiciler kullanabilirsiniz yakalamak ve onu kurtardı ve/veya güncellenmiş önce varlık için bir şeyler yapmak istiyorsanız: Handling JPA lifecycle event using listeners and callbacks .
Temel olarak, sizin fasulye bir
validate()
yöntemi yapmak
@PrePersist
ve
@PreUpdate
ile açıklama ve 2 yorum başına
Güncelleme (kod kimliğinin değerine boş kümesi bunu ise) o doğrulama yapabilirsiniz
Evet, dürüstçe şunu düşündüm: şimdi id otomatik olarak üretilirse, önceden ispat edilen olaydan sonra popülasyona girebilirdi, böylece önceden ispatlanmış kodunuz yürütüldüğünde hala kimliğin ne olduğunu bilmezsiniz (Ayrıca, örnekte bağlamanızın otomatik olarak DEĞİLDİR, ancak manuel olarak ayarlanmadığını da görebilirsiniz). Bu durumda yapabileceğiniz şey, isCodeEmpty
adı verilen (@Transient
no'lu açıklamalı olarak), sizin için bir boolean alanı eklemektir (bu, özellikle başlatılmamışsa varsayılan olarak yanlıştır). Ardından, @PrePersist
açıklamalı yönteminde, kod alanı değerinin boş olup olmadığını kontrol edersiniz ve eğer varsa, boole değerini true olarak ayarlayın. Sonra bu boole kontrol edecektir (id alanını ayarlama kenara) öyle sizin setId(...)
yöntemi refactor ve gerçek kümesi ise kimliği alanı o kadar kod alanının değeri: Uzun hakkında araştırma sonra
public class YourEntity {
@Transient
private boolean isCodeEmpty;
public void setId(Whatever id) {
this.id = id;
if(isCodeEmpty) {
this.code = id;
//if necessary:
//this.isCodeEmpty = false;
}
}
@PrePersist
public void validate() {
if(code == null || code.isEmpty()) {
isCodeEmpty = true;
}
}
}
Sen değeri almak için jeneratör kendiniz kullanabilir ve "elle" varlık olarak ayarlayın, @GeneratedValue önlemek olabilir – SJuan76
ben yok Burada basit bir uygulamasıdır Bunu manuel olarak ayarlamak istiyorum.Oracle'den id için sonraki değeri aldım ve bunu yeni varlığın kimliğine ayarladım, bu mantıklı mı? – mstzn