Представьте себе объект Employee
, который ссылается на Department
, используя составной ключ :
@Entity
public class Employee {
...
@ManyToOne
@JoinColumns({
@JoinColumn(name="dept_country", referencedColumnName="country"),
@JoinColumn(name="dept_id", referencedColumnName="id")
})
private Department dept;
...
В компоненте сеанса без сохранения состояния я связываю сотрудника с отделом с помощьюустановка соответствующего атрибута:
employee.setAbc(abc);
System.out.println(entityManager.contains(aDepartment))); //true
employee.setDepartment(aDepartment);
employee.setXyz(xyz);
entityManager.merge(employee);
=> Все атрибуты правильно сохраняются (обновляются) в базе данных, кроме Отдел .
Интересно, связано ли это с составным ключом, потому что, когда я смотрю на Hibernate SQL в фоновом режиме, пропускаются именно эти столбцы внешнего ключа.
14:46:18 INFO [STDOUT#write] Hibernate:
14:46:18 INFO [STDOUT#write] update
14:46:18 INFO [STDOUT#write] employees
14:46:18 INFO [STDOUT#write] set
14:46:18 INFO [STDOUT#write] abc=?,
14:46:18 INFO [STDOUT#write] xyz=?,
14:46:18 INFO [STDOUT#write] where
14:46:18 INFO [STDOUT#write] id=?
Надеюсь, я пропустил что-то тривиальное ...