我有一个实体地址
,并且该实体由另外两个实体拥有。
例如
@JoinColumn
和 mappedBy
对 User
或 Company
使用外键。
如何解决用户和公司工作地址的这个问题?
我尝试过 @JoinColumn
和 mappedBy
,但没有运气。
@Entity
class User {
...
@OneToMany
private List<Address> address;
...
}
@Entity
class Company{
...
@OneToMany
private List<Address> address;
...
}
@Entity
class Address {
private String street;
private String city;
private String state;
private String entityType; // User or Company
private String entityId; // id of User or Company
}
最佳答案
一个 - 如果您不被需要所有者类型和地址 ID 的数据库模式所困扰,那么您应该考虑“连接”表。您可以使用@JoinTable为Hibernate进行注释,如下所示:
@Entity
class Company {
...
@OneToMany
@JoinTable( name="company_address",
joinColumns={@JoinColumn(name="idCompany")},
inverseJoinColumns={@JoinColumn(name="idAddress"} )
List<Address> addresses;
}
您需要添加 company_address 表(以及另一个 user_address 表),该表将包含 idCompany 和 idAddress 外键列。 Hibernate 将完成剩下的工作。
除此之外,使用像这样的连接表进行一对多还允许多个实体(用户、公司等)引用相同地址,这不会如果地址只有一个所有者,则可能。
关于java - 如何在多个实体中使用通用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598543/