Учитывая, что вы определили ассоциацию 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
}
В случае, если Employer
может быть президентом другого Enterprise
, в котором он работает (кажется маловероятным, если только вы не можете быть президентом предприятия, не будучи нанятым им),и в случае, если вам нужно было получить доступ к Enterprise
, из которых Employer
является президентом от Employer
, вам необходимо добавить еще одну ассоциацию, в идеале с @OneToOne
(вы столкнетесь с проблемами, потому что отношения @OneToOne требуютобе сущности должны иметь одинаковый класс @Id).В этом случае я бы аннотировал метод getPresidedEnterprise()
на Employer
с @ManyToOne
по практическим соображениям.