我有一个分层的JPA映射,它是几个深度的类。像这样的东西
@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
public abstract class BaseEntityClass implements Serializable {
// lots of stuff common to all my entities.
}
@Entity
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
public abstract class EntityTypeOne extends BaseEntityClass {
// stuff common to EntityTypeOne
}
@Entity
@Inheritance(strategy= InheritanceType.TABLE_PER_CLASS)
public abstract class EntityTypeTwo extends BaseEntityClass {
// stuff common to EntityTypeTwo
}
我知道你使用@Inheritence方法和超类来定义映射策略。但是,这如何与深层次结构一起工作?我希望所有叶子类都映射到他们自己的表。我应该用BaseEntityClass做SINGLE_TABLE吗?
答案 0 :(得分:2)
您的基类应标记为TABLE_PER_CLASS
。以下是OpenJPA的示例:
@Entity
@Table(name="MAG")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Magazine {
...
}
@Entity
@Table(name="TABLOID")
public class Tabloid
extends Magazine {
...
}
根据JPA JavaDocs,应在类层次结构的根目录中指定@Inheritance
注释:
定义要用于实体类的继承策略 层次结构。它是在实体类中指定的,是实体的根 实体类层次结构。
规范未指定此注释是否可以放在子类上,因此其行为未定义。
所以要回答你在评论中提出的问题,如果你有这个层次结构:
SubSub -> Sub -> Base
您只需要使用Base
注释@Inheritance(strategy = TABLE_PER_CLASS)
。