Kode itu memiliki dua hal yang mencegahnya bekerja:
- Entitas Anda tidak memiliki
@Id
. Anda mungkin mengabaikannya karena ini adalah sebuah contoh, tetapi perlu ditunjukkan. - Anda telah memetakan dua kali kolom
parent_id
. Anak memiliki bidang Panjang dan bidang Induk yang dipetakan ke kolom yang sama. Singkirkan yang Panjang. Ini adalah hubungan Orang Tua yang Anda cari.
Setelah itu, apa yang Anda miliki di sana adalah satu-ke-banyak dua arah yang sepenuhnya tradisional dengan kolom gabungan. Jika tidak berhasil untuk Anda, berarti Anda melakukan kesalahan dalam kode tempat Anda membuat dan menyimpannya. Sangat mungkin, Anda tidak membuat objek dengan benar. Kode yang benar menggunakan entitas ini akan terlihat seperti ini:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Parent p = new Parent();
Child child = new Child();
child.parent = p;
Child child1 = new Child();
child1.parent = p;
p.children = Arrays.asList(child, child1);
session.save(p);
session.save(p.children.get(0));
session.save(p.children.get(1));
tx.commit();
Perhatikan terutama bahwa anak harus diatur dalam orang tua serta orang tua pada anak. Jangan membuat model objek setengah rusak dan mengharapkan Hibernate untuk membersihkan kekacauan Anda. Banyak orang mengabaikan persyaratan yang tampak jelas ini dan bertanya-tanya mengapa Hibernate tampak tidak stabil dan/atau tidak dapat diandalkan.