JPA несколько FK из одних и тех же таблиц

#java #jpa #jpa-2.0 #eclipselink

#java #jpa #jpa-2.0 #eclipselink

Вопрос:

Есть две таблицы с именами Employee и Order. Отношения между таблицами Employee (1) — (*) упорядочены. Также в заказе есть два FK от Employee, названные EmployeeEncoder и EmployeeUpdater.

Я использую EclipseLink (JPA 2.0) под Netbeans 7.0 с использованием JDK 7.

Создание заказа в отношении зарегистрированного сотрудника не составило труда. Когда дело доходит до обновления заказа и установки EmployeeUpdater, в котором EmployeeEncoder равен EmployeeEncoder, запись Employee дублируется.

Как я мог бы разрешить этот поток таким образом, чтобы дублирование записей в EmployeeUpdater было невозможно?

Ответ №1:

Когда вы сохраняете новый заказ, он должен ссылаться на сотрудника из того же контекста сохранения (EntityManager). Попробуйте выполнить функцию find() для сотрудника и присвоить ей значение для сотрудника заказа. Вы также могли бы использовать merge() вместо persist.

Ответ №2:

Возможно, вы устанавливаете объект Employee со значением первичного ключа null или 0 по порядку. Итак, вы получили дублированных сотрудников. Возможно, вам захочется выполнить отладку с помощью IDE, чтобы увидеть значение.

Задайте каскадный тип заказа для Employee как CascadeType.MERGE

Комментарии:

1. Среди каскадных типов… Что я должен использовать? download.oracle.com/javaee/6/api