0

我正在尝试对一个表执行自引用映射(父/子关系)映射。

我想要的是来自同一个表的两个不同的实体,这样我就可以分离属性等等。我正在考虑使用鉴别器值,但我不能,因为我的数据库已经定义如下:为了区分父级和子级,我们有列 parent_id 对于子类型不为空(parent_id 当然是外键到同一张桌子)。无法通过以下方式定义鉴别器值:如果对象是父类型,则鉴别器值为 null 否则为子类型。

我一直在寻找解决方案,但我有点卡住了。也许,我最终会使用一个具有两个属性的实体,这些属性指的是父级(子级不是 null,@ManyToOne)和子级列表(子级@OneToMany null)。但在那之前(那一刻,我必须决定使用一个实体),我想问一下是否有解决方法来执行我想做的事情。

4

2 回答 2

2

鉴别器可以是“公式”。这严格来说是 Hibernate 特性,JPA 不支持。您将使用@org.hibernate.annotations.DiscriminatorFormula,例如:

@Entity
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorFormula( "case when parent_id is null then 'PARENT' ELSE 'CHILD' end" )
@DiscriminatorValue("PARENT")
public class Parent {
    ...
}

// map Child using @DiscriminatorValue("CHILD")
于 2012-05-30T15:00:32.990 回答
0

另一种解决方案是利用特殊的 Hibernate 值@DiscriminatorValue("null")@DiscriminatorValue("not null")

@Entity
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn("parent_id")
@DiscriminatorValue("null")
public class Parent {
    ...
}

@Entity
@DiscriminatorValue("not null")
public class Child extends Parent {
    ...
}
于 2012-07-03T05:31:48.060 回答