:Özet bir sınıf içeren bir JPA çift yönlü ilişki nasıl eşlenir? Aşağıdaki basit bir şema varsayarsak
Varlık tablo - bazı varlıklar bu
entityId, commentId, commentText,....
Kişinin bir koleksiyonu var - tüm varlıklar
entityId, timeCreated,...
Yorumlar tablo ortak nitelikleri tablo.
pensonId (entityId), firstName, lastName,...
Ve aşağıdaki Java miras yapısı:
BaseEntity - abstract - entity, join inheritance with a discriminator
CommentedEntity - abstract - introduces `comments` collection - mapping tbd
Person - concrete - entity - mapping trivial
nasıl CommentedEntity
ve Comment
arasındaki iki yönlü ilişkiyi map ki? Aşağıdaki kod, bulduğum örneklerin en iyi yorumudur.
CommentedEntity CommentedEntity
yana
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="entityId", referencedColumnName="entityId")
private CommentedEntity owner;
- soyut sınıftır
@OneToMany(mappedBy="owner", fetch=FetchType.EAGER) private List<Comment> comments = new ArrayList<>();
Comment, bu işe yaramaz.
owner
, bilinmeyen bir varlığı işaret eder. CommentedEntity
öğesinin bir varlığı, bir kimlik vermenizi gerektirir, bu yüzden anlamını kullanmaz.- Birden çok somut varlık,
comments
koleksiyonuna sahip olduğundan, beton varlık adı eşlemede kullanılamaz.
Daha sonra bir person.commentList özelliğini iki yönlü olarak nasıl eşleriz?
__Comment__ yazarken __Person__ genelinde bir OneToMany var, ancak bu türün ne olduğu hakkında bir fikir yok. __CommentedEntity__ için __CommentedEntity__ içinde bir ManyToOne var ?! (__Person__ demek istediniz?) Alan türleri tutarlı olduğu ve persistabl olduğu sürece (Varlık veya MappedSuperclass) o zaman bu http: // gibi bunu (veya kullandığım uygulama ile en azından ben yapabilirim) yapabilmeniz gerekir. www.datanucleus.org/products/accessplatform_4_2/jpa/orm/one_to_many_collection.html#join_bi –
Üzgünüz, Neil. Çok daha basit bir örnek oluşturmalıydım ve bir hata yaptım. Soru, "CommentedEntity" ve "Comment" arasındaki çift yönlü haritalama ile ilgilidir. Bu haritalamayı ebeveyninden miras alacağı için 'Kişi' oyunda değil. Karışıklık için özür dilerim. – jacekn
Sağladığınız bağlantıya baktım. Davam, FK ile Hesap/Adres gibi. “Hesap” somutu kullandığınız yerde, soyut bir 'CommentedEntity' yazmam gerekecek. – jacekn