2016-08-29 2 views
0

У меня есть три лица и связанные с ним классы: BulkEmployee, BulkEmployeeRow и Департамент BulkEmployeeRow содержит объект BulkEmployee и Департамент, как это:Hibernate: Есть как слияние и обновление с помощью аннотаций

@ManyToOne 
BulkEmployee bulkEmployee; 
@ManyToOne(fetch = FetchType.EAGER) 
@Cascade(value = { CascadeType.SAVE_UPDATE }) 
Department department 

Теперь есть UI, где несколько сотрудников могут быть созданы навалом. Эта страница имеет функцию автосохранения, поэтому любое изменение запускает спящий режим saveOrUpdate

Пользователь может добавить несколько строк сотрудника на странице. Каждая строка сотрудника имеет выбор для выбора отдела из существующего списка отделов или может заполнить форму для создания нового отдела.

Теперь проблема заключается в том, что, когда пользователь выбирает один и тот же отдел для более чем одного сотрудника, он дает следующее исключение:

org.hibernate.NonUniqueObjectException: другой объект с тем же значением идентификатора уже был связан с сессией

Если изменить CascadeType отдела по СЛИВАТЬСЯ, как показано ниже:

@ManyToOne(fetch = FetchType.EAGER) 
@Cascade(value = { CascadeType.MERGE }) 
Department department 

затем выбор же отдел для разных сотрудников работает нормально, но при выборе нового отдела дает следующее исключение:

org.hibernate.TransientObjectException: объект ссылается на несохраненную переходного экземпляра - сохранить переходный экземпляр перед тем промывка:

Есть ли способ, которым я могу попросить спящий режим слить, а затем сохранить только аннотации?

ответ

0

Хорошо, поэтому его невозможно сделать с помощью аннотации, я думаю.

Так, как это было предложено везде, я

dao.merge(entity) 

, а затем

dao.saveOrUpdate(entity) 

решить проблему

Смежные вопросы