将数据库查找映射到 jpa 实体
Mapping database lookups to jpa entities
我有以下数据库 tables:查找和员工。
查找Table: 具有样本数据的结构。
class_name value description
GENDER_CODE 1 Male
GENDER_CODE 2 Female
BANK_CODE 1 HSBC
BANK_CODE 2 CityBank
员工Table:结构样本数据。
id name gender_code bank_code
1 Yusuf 1 1
2 Maher 1 2
3 Suzan 2 1
将它们映射到 JPA 实体的最佳方法是什么?
我试图将摘要 class 映射到查找 table 并使用 class_name
列作为子 classes 性别和银行的鉴别器并引用银行和员工对象中的性别为 ManyToOne .. 但是当 gender_code
和 bank_code
具有相同的值时,我得到一个 class 转换异常。
我尝试创建视图 gender_lookup
和 Bank_lookup
并将它们直接映射到实体。 hibernate 再次抱怨他找不到具有这样名称的 table。
我会尝试将查找表映射为 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;
}
我有以下数据库 tables:查找和员工。
查找Table: 具有样本数据的结构。
class_name value description
GENDER_CODE 1 Male
GENDER_CODE 2 Female
BANK_CODE 1 HSBC
BANK_CODE 2 CityBank
员工Table:结构样本数据。
id name gender_code bank_code
1 Yusuf 1 1
2 Maher 1 2
3 Suzan 2 1
将它们映射到 JPA 实体的最佳方法是什么?
我试图将摘要 class 映射到查找 table 并使用 class_name
列作为子 classes 性别和银行的鉴别器并引用银行和员工对象中的性别为 ManyToOne .. 但是当 gender_code
和 bank_code
具有相同的值时,我得到一个 class 转换异常。
我尝试创建视图 gender_lookup
和 Bank_lookup
并将它们直接映射到实体。 hibernate 再次抱怨他找不到具有这样名称的 table。
我会尝试将查找表映射为 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;
}