Problemem jest prawdopodobnie strategia generowania identyfikatora (pod warunkiem, że prawidłowo zainicjalizowałeś kontakt). Obiekt użytkownika musi zostać wstawiony do DB, aby ustawić swój identyfikator, ale w tym samym czasie Kontakt potrzebuje tego identyfikatora, aby był prawidłowym obiektem. Obaj muszą się w tej samej transakcji.
Jeśli przełączysz poziom rejestrowania na odpowiedni dla Twojego JPA (w perstitance.xml), najprawdopodobniej zobaczysz sekwencję wstawiania użytkownika i kontaktu, ale kontakt będzie miał identyfikator użytkownika 0.
Tak więc, a) upewnij się, że wyraźnie ustawiłeś użytkownika w swoim kontakcie (jak powiedziałeś, relacja jest zarządzana przez Kontakt. b) Ustaw kontakt na użytkownika. c) trwać (w jednej transakcji). W zależności od Twojej implementacji JPA może nadal nie działać (sprawdź wystawione zapytania, najprawdopodobniej będzie insert na kontakcie, a potem aktualizacja). Zmień strategię generowania na TABLE, z TABLE JPA pobiera następny wolny identyfikator, przypisuje go do obiektu i wykonuje wstawianie, aby był „znany” przed wstawieniem.