如何在多个实体中使用公共实体

时间:2019-08-21 20:06:27

标签: java hibernate jpa

我有一个实体Address,该实体由另外两个实体拥有。

Ex

@JoinColumnmappedByUserCompany使用外键。 如何解决此问题以同时为用户和公司工作?

我尝试过@JoinColumnmappedBy,但是没有运气。

@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 
}

1 个答案:

答案 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完成。

除其他外,对这样的联接表进行一对多操作还允许多个实体(用户,公司等)引用相同地址,而该地址不会如果地址只有一个所有者,则可以。