gpt4 book ai didi

java - Hibernate 可嵌入继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:18 25 4
gpt4 key购买 nike

我有一个对象,它的字段可以是多种对象类型。此对象在单个表中编码,其中包含字段子类型的鉴别器列。这些子类型中的每一个都将其字段映射到父对象表中的列。我似乎无法在 hibernate 中对此进行建模。无论表中的子类型数据是什么,下面的代码都会为 getSubfield() 返回 null。

架构

  id   type   whosit   whatsit  +----+------+--------+---------+| 1  | "A"  | "test" | null    || 2  | "B"  | null   | "test"  |+----+------+--------+---------+

Domain Objects

@Entity
public class Parent {
protected @Id @GeneratedValue int id;
protected Subfield subfield;

public Subfield getSubfield() {return subfield;}
}


@Embeddable
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)
public abstract class Subfield {}


@DiscriminatorValue("A")
public class TypeA extends Subfield {
public String whosit;
}


@DiscriminatorValue("B")
public class TypeB extends Subfield {
public String whatsit;
}

“从父 p 中选择 p”

{id=1,subfield=null}
{id=2,subfield=null}

是否有可能用这个对象模型完成我想要的,或者我是否需要更有创意(这是一个遗留数据库,更改模式不是首选)

最佳答案

正如提问者所指出的,hibernate 不支持可嵌入类的继承(https://hibernate.atlassian.net/browse/HHH-1910)。

根据 Eclipse wiki,JPA 未指定此行为,但 EclipseLink 支持它 ( http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Embeddable#Inheritance )。

我的建议是完全打破 Subfield 内部的类层次结构。很糟糕,但应该可以解决这个问题。

关于java - Hibernate 可嵌入继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com