java - 如何在多个实体中使用通用实体

标签 java hibernate jpa

我有一个实体地址,并且该实体由另外两个实体拥有。

例如

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

最佳答案

一个 - 如果您不被需要所有者类型和地址 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/

相关文章:

java - 奇怪的 JVM 验证错误 : Mismatched stack types

java - 从 Java 中的方法打印数组

java - 如何使用 hibernate 将文件存储在postgres数据库中?

hibernate - 使用 native 查询的 JPA(Hibernate) 和 postgresql 批量插入

java - 我试图将双变量从一种方法调用到另一种方法中

java - GUI 元素的垃圾收集器

java - 为什么使用别名的 native 删除查询在 Spring Data JPA 中不起作用?

java - 使用maven将persistence.xml放在库jar中的哪里?

java - 如何覆盖策略 GenerationType.TABLE 的 Hibernate Id 生成

mysql - Spring JPA OneToMany 重复条目 MySQLConstraint 违规错误