在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已经有默认的提取模式。
我不清楚级联类型是如何工作的。这是否同时进行,这决定了为雇主级联的内容以及为员工级联的内容?非常感谢任何帮助。
父/子关系以及级联如何修改它们对我来说是最令人困惑的部分。
答案 0 :(得分:0)
您可以在关系的两侧定义提取模式。获取模式不依赖于关系映射。由于eager fetching是默认值,因此您应该只显式地定义延迟提取。请注意,延迟提取只是一个提示,因此提供者可以根据需要随意获取属性。
您不应该从多方面定义级联。从多方面级联的语义未被JPA规范定义。因此,提供者可以自由地实现它自己的语义,甚至抛出异常。因此,在您的情况下,只有employees
实体的Employer
属性可以定义级联。