现在,据我所知,JPA 中有两种最常用的继承映射策略:
- 单表- 所有类(子类和超类)都映射在一个表中,该表具有所有类的所有字段作为列;并且仅特定于某些子类的字段在其他相应条目中为 NULL。
.
@Entity
@Table(name="types")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="types", discriminatorType=DiscriminatorType.STRING, length=1)
public abstract class Base { //... }
@Entity
@DiscriminatorValue(value="A")
public class TypeA extends Base { //... }
@Entity
@DiscriminatorValue(value="B")
public class TypeB extends Base { //... }
- 连接表策略- 基类有一个表,其中所有基类的字段作为列,另一列用于类型;每个子类也有特定的表,每个子类只有相应的子类字段,这些字段与基表一对一(通过 PK)映射。
.
@Entity
@Table(name="USERS")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="types",discriminatorType=STRING, length=1)
public abstract class Base { //... }
@Entity
@Table(name="SELLERS")
@DiscriminatorValue(value="A")
@PrimaryKeyJoinColumn(name="base_id")
public class TypeA extends User { //... }
@Entity
@Table(name="BIDDERS")
@DiscriminatorValue(value="B")
@PrimaryKeyJoinColumn(name="base_id")
public class TypeB extends User { //... }
在我的域中,我有这些课程:
public abstract class Base {
//data
}
public class TypeA extends Base {
//only one field
}
public class TypeB extends Base {
// many more fields
}
我想要一个 1. TypeA 和 Base 之间的继承映射策略和 2. TypeB 和 Base 之间的继承映射策略(这是一种过度简化;实际上有很多实体),因为我不希望另一个表用于另一个字段。这在 JPA 中是否可行,是否有意义?
编辑:我不知道代码格式有什么问题...