为了我的数据库管理员,我必须使用加入的继承策略,这将更容易使用Single.Table但是,所以让我们说一个实体:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Post{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
protected String title;
protected String d_type;// I want this to to be the discriminator.
}
孩子:
@Entity
public abstract class Book{
protected String title;
}
这个例子很简单,为了得到一个好的答案,但实际上我正在处理5"孩子"每个都有其特定的属性和方法,除了一个让我们调用它CommonPost
,它没有添加父母已经提供的内容,这就是为什么我想添加一个带有枚举类型的鉴别器,如下所示{xPost, yPost,..,CommonPost}。首先是可能的,甚至是实际的?如果不是更好的选择是可行的。
答案 0 :(得分:0)
这是可能的,但如果支持,您可以咨询JPA供应商。我相信Hibernate支持这一点。他们称之为混合继承策略:
以下是一个示例:
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="POST_TYPE")
public abstract class Post{
从技术上讲,它是一个JOINED策略,但没有什么可以阻止你添加一个鉴别器列(通常用于SINGLE-TABLE策略)。
另一个建议是:如果你说实体CommonPost
没有任何特定的属性或方法,那么为什么不将它作为继承层次结构中最顶层的类呢?然后,您现在可以删除抽象类Post
。
以下是您的表现方式:
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="POST_TYPE")
@DiscriminatorValue("C")
public class CommonPost {
...
@DiscriminatorValue("X")
public class XPost extends CommonPost {
...
@DiscriminatorValue("Y")
public class YPost extends CommonPost {