我有以下数据库表:查找和员工。
查找表:具有示例数据的结构。
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_code
和bank_code
具有相同的值时,抛出异常。
我尝试创建视图gender_lookup
和Bank_lookup
并将其直接映射到实体。冬眠再次抱怨说他找不到这样的名字的桌子。
答案 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;
}