#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