这是父类Enterprise。它有雇主,其中一位是企业总裁。
@Entity class Enterprise { // fields @OneToMany public List<Employee> getEmployers() // implementation @OneToOne public Employee getPresident() // implementation }
这是子雇员类。它仅提供有关Enterprise的信息。但是问题是我应该使用哪种关联?
@Entity class Employee { // fields // what association should I use? public Enterprise getEnterprise() // implementation }
假设您已使用定义了Enterprise-> Employers关联@OneToMany,这意味着an Employer仅属于一个Enterprise,则应使用@ManyToOne,意味着每个都Employer属于max。1 Enterprise,但是Enterprise可以参考很多Employers。
Enterprise
Employers
@OneToMany
Employer
@ManyToOne
您可以使用mapped-by注释中的属性仅在一侧之一中定义关联细节(连接列等):
mapped-by
@Entity class Enterprise { @OneToMany(mapped-by="enterprise") public List<Employee> getEmployers() // implementation @OneToOne public Employee getPresident() // implementation } @Entity class Employee { @ManyToOne @JoinTable ( name="Enterprise", joinColumns={ @JoinColumn(name="ENT_ID", referencedColumnName="ENT_ID") } public Enterprise getEnterprise() // implementation }
在情况下Employer可能是一个不同的总裁Enterprise,他采用(似乎不太可能,除非你可以是一个企业的总裁,而不被它采用的),并且如果你需要访问Enterprise它的Employer是总统从Employer实体,您可能需要添加另一个关联,理想情况下是这样@OneToOne(您会遇到问题,因为@OneToOne关系要求两个实体都具有相同的@Id类)。在这种情况下,出于实际原因,我将使用注释该getPresidedEnterprise()方法。Employer``@ManyToOne
@OneToOne
getPresidedEnterprise()
Employer``@ManyToOne