Thx mas Endy atas penjelasannya yang detil (jadi pengen ditraining lagi hehe)
Kalau misalnya relasinya seperti ini: JenisProduk 1..* Produk 1..* Rekening kemudian querynya adalah: select p from Produk p join fetch JenisProduk jp left outer join fetch p.rekening rekening where produk.id = '1' and rekening.status = 'aktif' jika jumlah rekening yang 'aktif' untuk produk dengan id '1' adalah 3 berarti hasilnya kan 1x1x3 row. Bukannya hibernate seharusnya secara "pintar" membuat satu objek produk mengisi property2nya kemudian mengisi collection rekening dengan 3 objek rekening 'aktif' untuk produk.id = '1' kemudian mengembalikan 1 objek produk saja? > > BIla dibatasi dengan ID, seperti ini: > select p from Product p > join fetch p.supplier > join fetch p.category > where p.id=1 > > Maka resultsetnya akan menjadi 1x5x3 > > Itu sebabnya Bustanil dapat NURE. > Solusinya, seperti kata Muklis, pakai distinct. > Tapi ini juga ada konsekuensinya, karena tetap saja 1x5x3 record akan > dikirim dari db server ke app server. > Nanti di appserver baru Hibernate akan membuang 14 record yang > ternyata duplikat. > > Pesan moral dari cerita ini: > Kalau mendesain aplikasi, kata kuncinya adalah trade-off. > Tidak ada 100% perfect, pasti ada aspek yang harus dikorbankan agar > aspek lain bisa maksimal. > Jadi, kalau mau jadi architect yang baik, harus: > 1. Tau opsi yang tersedia > 2. Tau konsekuensi dari masing-masing opsi > 3. Bisa mengkompromikan konsekuensi tersebut dengan goal yang ingin > dicapai. > > Good luck ... :D > > -- > Endy Muhardin > http://endy.artivisi.com > Y! : endymuhardin > -- life learn contribute -- > > -- Bustanil Arifin RnD - PT.Collega Inti Pratama