我在互联网上看到过几个关于使用JoinColumn的例子,如下例所示。
实际上,我想问你关于这个部分例子的两个问题。我们不能通过向JoinColumn添加“nullable = false”参数来摆脱“可选”参数。可选和可空的实体关系之间是否存在任何差异?在joincolumn中将insertable和updatable设置为false有什么好处?这样做是为了确保Employee实体无法更新Department实体吗?
@Entity
public class Employee {
// ...
@ManyToOne(optional=false)
@JoinColumn(name="DEPT_ID", insertable=false, updatable=false)
private Department department;
// ...
}
答案 0 :(得分:2)
optional = false
是持久性框架在构建java对象时解释的运行时指令。 JoinColumn上的nullable = true
用于设置数据库模式,可能会也可能不会在运行时解释,具体取决于您的持久性提供程序。
通常情况下,JoinColumn映射是以这种方式完成的,以表明该部门的关系是由另一方管理的。
您可能会:
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="DEPT_ID")
private Set<Employee> employees;
在您的部门上,您可以通过将其添加到那里的集合来创建新的员工 - 部门关系,而不是在员工上设置部门。这就是为什么你将Employee的部门标记为不可更新的原因,因为部门“拥有”修改关系的能力。