Проблемът вероятно е вашата стратегия за генериране на идентификатор (при условие, че сте инициализирали правилно контакта). Потребителският обект трябва да бъде вмъкнат в DB, за да има зададен идентификатор, но в същото време контактът се нуждае от този идентификатор, за да бъде валиден обект. И двамата трябва да се случват в същата транзакция.
Ако превключите нивото на регистриране на фино за вашия JPA (в perstitance.xml), най-вероятно ще видите последователността на вмъкване на потребител и контакт, но контактът ще има user_id 0.
Така че, а) уверете се, че сте задали изрично потребител във вашия контакт (както казахте, връзката се управлява от Contact. b) Задайте контакт на потребителя. в) продължават (в една транзакция). В зависимост от изпълнението на JPA може да не работи (проверете издадените заявки, най-вероятно ще има вмъкване при контакт и след това актуализиране). Променете стратегията за генериране на TABLE, като TABLE JPA взема следващия безплатен идентификатор, присвоява го на обекта и прави вмъкването, така че да е „известен“ преди вмъкването.