Hibernate映射:子对象属性上的OneToMany和OneToOne

Art*_*sov 6 java hibernate hibernate-mapping

这是父类Enterprise.它有雇主,其中一个是企业总裁.

@Entity
class Enterprise
{
   // fields

   @OneToMany
   public List<Employee> getEmployers()
   // implementation    

   @OneToOne
   public Employee getPresident()
   // implementation

}
Run Code Online (Sandbox Code Playgroud)

这是子Employee类.它只有关于他工作的企业的信息.但问题是我应该使用哪种关联?

@Entity
class Employee 
{
   // fields

   // what association should I use?
   public Enterprise getEnterprise()
   // implementation
}
Run Code Online (Sandbox Code Playgroud)

Xav*_*ica 7

鉴于你已经定义了Enterprise- > Employers关联@OneToMany,这意味着一个Employer属于只有一个Enterprise,你应该使用@ManyToOne,这意味着每个Employer属于最大.1 Enterprise,但Enterprise可以参考很多Employers.

您可以使用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
}
Run Code Online (Sandbox Code Playgroud)

在情况下Employer可能是一个不同的总裁Enterprise,他采用(似乎不太可能,除非你可以是一个企业的总裁,而不被它采用的),并且如果你需要访问Enterprise它的Employer是总统从Employer实体,你需要添加另一个关联,理想情况下@OneToOne(你会遇到问题,因为@OneToOne关系要求两个实体都有相同的@Id类).在这种情况下,我将注释getPresidedEnterprise()的方法Employer@ManyToOne实际的原因.