Bileşik PK'nizin FK içerip içermediğini bildiğim kadarıyla, kullanımı daha kolay ve daha kolay @IdClass
İle , iki değişkende bir sütun kümeniz olamaz (olası çakışmalar) nedeniyle @EmbeddedId
, FK sütununuz için iki kez, bir tek giriş @Embeddedable
ve bir kez, yani @ManyToOne
nerede @ManyToOne
salt okunur ( @PrimaryKeyJoinColumn
) olması gerektiği için eşlemeyi tanımlamanız gerekir.
Bu nedenle, FK'nizi basit yazım kullanarak ayarlamanız gerekir @Embeddedable
.
Diğer sitede, @IdClass
bu durumu kullanmak , OneToOne ve ManyToOne İlişkileri aracılığıyla Birincil Anahtarlarda gösterildiği gibi çok daha kolay ele alınabilir :
Örnek JPA 2.0 ManyToOne kimlik ek açıklaması
...
@Entity
@IdClass(PhonePK.class)
public class Phone {
@Id
private String type;
@ManyToOne
@Id
@JoinColumn(name="OWNER_ID", referencedColumnName="EMP_ID")
private Employee owner;
...
}
Örnek JPA 2.0 kimlik sınıfı
...
public class PhonePK {
private String type;
private long owner;
public PhonePK() {}
public PhonePK(String type, long owner) {
this.type = type;
this.owner = owner;
}
public boolean equals(Object object) {
if (object instanceof PhonePK) {
PhonePK pk = (PhonePK)object;
return type.equals(pk.type) && owner == pk.owner;
} else {
return false;
}
}
public int hashCode() {
return type.hashCode() + owner;
}
}
@IdClass
etsem de@EmbeddedId
, çoğu durumda tercih etsem de benzersiz bir kullanım durumu eklemek istiyorum (Bunu Antonio Goncalves'in yaptığı bir oturumdan öğrendim. Onun önerdiği şey@IdClass
, kompozit anahtar sınıf erişilebilir değil veya ek açıklama ekleyemediğimiz başka bir modülden veya eski koddan geliyor. Bu senaryolarda@IdClass
bize bir yol gösterecek.