在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)上?或者我把它们放在反向(雇主)上?还是do (can?)我把它们都放上去了?我对JPA/Hibernate中的级联很困惑。我猜我可以把取回模式放在两者上,这将决定雇主如何取回雇员的集合,以及雇员如何取回他的雇主。我做这个假设是因为@OneToMany和@ManyToOne已经有默认的获取模式了。
我不清楚级联类型如何工作。这两者都有吗这就决定了什么是雇主级联的什么是雇员级联的?如有任何帮助,不胜感激。
父/子关系以及cascade如何修改它们是我最困惑的部分。
可以在关系的两端定义一个获取模式。获取模式不依赖于关系映射。由于即时抓取是默认的,所以应该只显式地定义延迟抓取。请注意,延迟获取只是一个提示,因此提供者可以自由地在其认为合适的情况下急切地获取属性。
你不应该从多面定义级联。JPA规范未定义来自多方的级联语义。因此,提供者可以自由地实现自己的语义,甚至抛出异常。因此,在您的示例中,只有Employer
实体的employees
属性可以定义级联。