【问题标题】:Mapping database lookups to jpa entities将数据库查找映射到 jpa 实体
【发布时间】:2019-02-04 15:57:50
【问题描述】:

我有以下数据库表:查找和雇员。

查找表:带有样本数据的结构。

class_name      value        description
GENDER_CODE       1          Male
GENDER_CODE       2          Female
BANK_CODE         1          HSBC
BANK_CODE         2          CityBank

员工表:带有样本数据的结构。

id       name      gender_code     bank_code
1        Yusuf         1               1
2        Maher         1               2
3        Suzan         2               1

将它们映射到 JPA 实体的最佳方法是什么?

我尝试将抽象类映射到查找表并使用class_name 列作为子类 Gender 和 Bank 的鉴别器,并在员工对象中将银行和性别引用为 ManyToOne.. 但我得到了一个类转换异常当gender_codebank_code 具有相同的值时。

我尝试创建视图gender_lookupBank_lookup 并将它们直接映射到实体。 hibernate 再次抱怨他找不到具有这样名称的表。

【问题讨论】:

    标签: java hibernate jpa hibernate-mapping


    【解决方案1】:

    我会尝试将查找表映射为 n+1 个分隔实体、一个抽象和 n 个子实体。

    映射的超类应该有 SINGLE_TABLE 继承,子类需要声明鉴别器。

    类似这样的:

    @MappedSuperclass
    @DiscriminatorColumn(name = "class_name")
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    public abstract class LookupTable{
    
        @Id
        private Long vale;
    
        @Column(nullable = false)
        private String description;
    
        // Getters and setters
    }
    
    @Entity
    @DiscriminatorValue("GENDER_CODE")
    public class GenderCode extends LookupTable() {
    
    }
    
    
    @Entity
    @DiscriminatorValue("BANK_CODE")
    public class BankCode extends LookupTable() {
    
    }
    
    @Entity
    public class Employee{
    
        @Id
        private Long id;
    
        @Column(nullable = false)
        private String name;
    
        @Column(nullable = false)
        private GenderCode genderCode;
    
        @Column(nullable = false)
        private BankCode bankCode;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-10
      • 2011-07-13
      • 2010-10-14
      • 1970-01-01
      • 2020-04-18
      • 2012-07-04
      • 2013-08-18
      • 2020-08-15
      相关资源
      最近更新 更多