将数据库查找映射到JPA实体

时间:2019-02-04 15:57:50

标签: java hibernate jpa hibernate-mapping

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

查找表:具有示例数据的结构。

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子类的区分符,并在employee对象中将bank和性别引用为ManyToOne。.但是我正在获取一个类当gender_codebank_code具有相同的值时,抛出异常。

我尝试创建视图gender_lookupBank_lookup并将其直接映射到实体。冬眠再次抱怨说他找不到这样的名字的桌子。

1 个答案:

答案 0 :(得分:1)

我会尝试将lookuptable映射为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;
}