在双向关系中设置级联和获取的位置

时间:2014-05-06 22:28:13

标签: hibernate jpa hibernate-cascade

在hibernate / JPA中的双向关系中,您指定了获取模式和级联类型的实体(或两者?)?一个例子:

@Entity
@Table(name="EMPLOYER")
public Employer implements Serializable
{
     @OneToMany(mappedBy="employer")
     private Set<Employee> employees;
}

@Entity
@Table(name="EMPLOYEE")
public Employee implements Serializable
{
     @ManyToOne
     @JoinColumn(name="employer_id", referencedColumnName="id")
     private Employer employer;
}

我是否将获取模式和级联类型放在关系(Employee)的所有者身上?或者我把它们放在反向(雇主)?或者(可以?)我把它们放在两者上?我对JPA / Hibernate中的级联很困惑。我猜我可以将获取模式放在两者上,这将决定雇主如何获取雇员集以及雇员将如何取得雇主。我正在做这个假设,因为@OneToMany和@ManyToOne已经有默认的提取模式。

我不清楚级联类型是如何工作的。这是否同时进行,这决定了为雇主级联的内容以及为员工级联的内容?非常感谢任何帮助。

父/子关系以及级联如何修改它们对我来说是最令人困惑的部分。

1 个答案:

答案 0 :(得分:0)

您可以在关系的两侧定义提取模式。获取模式不依赖于关系映射。由于eager fetching是默认值,因此您应该只显式地定义延迟提取。请注意,延迟提取只是一个提示,因此提供者可以根据需要随意获取属性。

您不应该从多方面定义级联。从多方面级联的语义未被JPA规范定义。因此,提供者可以自由地实现它自己的语义,甚至抛出异常。因此,在您的情况下,只有employees实体的Employer属性可以定义级联。