Kullanarak, bir çağrışım sınıfı oluşturmama izin veren bazı Hazırda Bekleme/JPA ek açıklamalarım var (yine de dürüst olmak için farkı bilmiyorum). Bu sınıf, bir nesneyle ilişkili iki öğeyi birleştiriyor. Orijinal olarak @JoinTable
kullanıyordum, ancak dernekler ile çok daha fazla meta veriye ihtiyacım olduğunu fark ettim, bu yüzden kodu başka bir nesne türüne dönüştürmek zorunda kaldım. Hibernate @ManyToOne Başvurulan Sınıf @Id
ID
sütun işaretlemek için
@Id
kullanıyorum ve
String uuid
için
@NaturalId (mutable = false)
kullanarak.
İlişkilendirme kursum @ManyToOne
kullanıyor ve tabloyu iyi oluşturuyor, ancak tabloya baktığımda tablo eşleme sütunu olarak @Id
alanını kullanıyor. İlişkilendirme/ilişkilendirmeleri diğer sistemlere aktarma kolaylığı için bu ilişkilendirme sınıfının @NaturalId uuid
kullanmasını tercih ederim.
Doğru tanıtıcıyı kullanmak için ilişkiyi nasıl edinebilirim? Başvuru için
böyle benim DB'ın ve Java kodu görünüm:
AssociationsTable
----------------------------------------------
| ID | META DATA | ID ASSOC. 1 | ID ASSOC. 2 |
----------------------------------------------
| 1 | stuff | 1 | 2 |
----------------------------------------------
Objects
------------------------------
| ID | META DATA | UUID |
------------------------------
| 1 | stuff | FOO-123 |
------------------------------
| 2 | stuff | BAR-456 |
------------------------------
Association Class{
ObjA main;
ObjA sub;
@ManyToOne
getMain()
@ManyToOne
getSub()
}
ObjA Class{
Long id;
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@XmlElement
@Column(name = "ID", unique = true, nullable = false)
getId()
String uuid;
@NaturalId (mutable = false)
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
getUUID()
}
[Önceki sorunuzun] farkındayım (http://stackoverflow.com/q/31926396/835000). Bu yüzden netleştirmeye karar verdim: neden tabloları bağlama konusunda endişeleniyorsunuz? Yani veritabanı seviyesindeki varlıklar '@ 'ile bağlanabilirler, daha sonra sıfırlama anahtar değerleri ile serileştirilebilirler, sonra başka bir örneğe iletilebilirler, java-fasulye seviyesindeki tüm ilişkilerle serileştirilir, ardından yeni veritabanında yeni değerler ile temizlenirler. '@ Id' özellikleri ... Varlıklar için birincil anahtarlar farklı olacak, ancak yine de bunları @ NaturalId alanıyla alabileceksiniz. Bir şey özledim mi? .. – svaor