想象一下使用复合键引用Employee
的{{1}}实体:
Department
在无状态会话Bean中,我通过设置适当的属性来将Employee与Department关联:
@Entity
public class Employee {
...
@ManyToOne
@JoinColumns({
@JoinColumn(name="dept_country", referencedColumnName="country"),
@JoinColumn(name="dept_id", referencedColumnName="id")
})
private Department dept;
...
=> 除 部门外,所有属性都已正确保存(更新)到数据库中。
我想知道这是否与复合键有关,因为当我在后台查看Hibernate SQL时,正好缺少那些外键列。
employee.setAbc(abc);
System.out.println(entityManager.contains(aDepartment))); //true
employee.setDepartment(aDepartment);
employee.setXyz(xyz);
entityManager.merge(employee);
我希望我错过了一些微不足道的事情......
答案 0 :(得分:2)
拍我!
正如我所提到的,我编写了上面的Employee
/ Department
代码段来澄清我的情况。我不应该这样做!我省略了一个关键元素:updatable
标志
实际上,我的案例如下:
@ManyToOne
@JoinColumns({
@JoinColumn(name="dept_country", referencedColumnName="country", insertable = false, updatable = false),
@JoinColumn(name="dept_id", referencedColumnName="id", insertable = false, updatable = false)
})
问题的答案非常明显:切换到updatable = true
对不起!
P.S:不过,我很困惑为什么它在我的单元测试中工作而不是在App Server中工作