我有一个实体Address
,该实体由另外两个实体拥有。
Ex
@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
}
答案 0 :(得分:0)
一个-如果您不拘泥于要求所有者类型和地址中的id的数据库模式,则应考虑使用“ join”表。您可以使用@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完成。
除其他外,对这样的联接表进行一对多操作还允许多个实体(用户,公司等)引用相同地址,而该地址不会如果地址只有一个所有者,则可以。