Masalahnya mungkin adalah strategi pembuatan id Anda (asalkan Anda menginisialisasi kontak dengan benar). Objek pengguna harus dimasukkan ke DB agar idnya disetel, tetapi pada saat yang sama Kontak membutuhkan id ini untuk menjadi objek yang valid. Keduanya harus terjadi dalam transaksi yang sama.
Jika Anda mengubah level logging ke fine untuk JPA Anda (dalam perstitance.xml), kemungkinan besar Anda akan melihat urutan penyisipan pengguna dan kontak tetapi kontak akan memiliki user_id 0.
Jadi, a) pastikan Anda secara eksplisit mengatur pengguna di kontak Anda (seperti yang Anda katakan bahwa relasi dikelola oleh Kontak. b) Setel kontak pada pengguna. c) bertahan (dalam satu transaksi). Tergantung pada implementasi JPA Anda, ini mungkin masih tidak berfungsi (periksa kueri yang dikeluarkan, kemungkinan besar akan ada sisipan pada kontak dan kemudian perbarui). Ubah strategi pembuatan menjadi TABLE, dengan TABLE JPA mengambil ID gratis berikutnya, menetapkannya ke objek dan melakukan penyisipan sehingga "diketahui" sebelum penyisipan.