【问题标题】:Hibernate map field of an Entity as a foreign key to multiple Entities实体的休眠映射字段作为多个实体的外键
【发布时间】:2019-02-25 12:04:06
【问题描述】:

我想在 Address 实体中保存 User 和 Employee 实体的地址。 如何设计我的地址实体,以便我能够保存用户和员工的地址。

【问题讨论】:

  • 互联网上的许多 JPA 文档告诉你做什么?

标签: java mysql hibernate spring-boot jpa


【解决方案1】:
  1. 创建一个以地址实体为成员的抽象基类 Person。
  2. 在 User 和 Employee 子类中扩展 Person 类。

    @MappedSuperclass
    抽象类人{
        @ManyToOne @JoinColumn(name="ADDRESS")
        受保护的地址地址;
    }
    
    @实体
    员工类扩展人{}
    
    @实体
    类用户扩展人{}

【讨论】:

    【解决方案2】:

    您有两种选择,一种是使地址实体可嵌入,

    @Embeddable
    public class Address {
       ....
    }
    
    @Entity
    public class User {
         .....
        @Embedded
        private Address address;
    
    }
    
    @Entity
    public class Employee {
         .....
        @Embedded
        private Address address;
    
    }
    

    这将复制 Employee 表和 User 表中的列。

    如果要共享地址,另一种方法是将地址用作表格:

    @Entity
    public class Address {
       ....
    }
    
    @Entity
    public class User {
         .....
        @ManyToOne
        private Address address;
    
    }
    
    @Entity
    public class Employee {
         .....
        @ManyToOne
        private Address address;
    
    }
    

    【讨论】:

    • 按照第二种方法,地址实体如何发现该地址是给用户还是给员工。
    • 地址是否需要知道用户或员工?
    • 是的,地址也应该有关于用户/员工的信息
    • 好吧,我觉得你应该用单表继承,创建一个单表来存储用户和员工。
    • 如果不是,地址表将有两个外键,一个给用户,一个给员工。我认为最好的应该是地址只有一个外键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2019-12-03
    • 2020-12-18
    • 2016-10-18
    相关资源
    最近更新 更多