gpt4 book ai didi

java - hibernate 映射中的 2 级继承问题

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:26 25 4
gpt4 key购买 nike

这是我的类结构:

class A
class B extends A
class C extends A
class D extends C
class E extends C

这是我的映射(为简洁起见省略了类主体):

A 类:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@MappedSuperclass
@DiscriminatorColumn(
name="className",
discriminatorType=DiscriminatorType.STRING
)
@ForceDiscriminator
public abstract class A

B 类:

@Entity
@DiscriminatorValue("B")
public class B extends A

C 类:

@Entity
@DiscriminatorValue("C")
@MappedSuperclass
@DiscriminatorColumn(
name="cType",
discriminatorType=DiscriminatorType.STRING
)
@ForceDiscriminator
public abstract class C extends A

D 级:

@Entity
@DiscriminatorValue("D")
public class D extends C

E 类:

@Entity
@DiscriminatorValue("E")
public class E extends C

我有一个包含一组 A 的类 F:

@Entity
public class F
{
...

@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinTable(
name="F_A",
joinColumns = @JoinColumn(name="A_ID"),
inverseJoinColumns = @JoinColumn(name="F_ID")
)
private Set<A> aSet = new HashSet<A>();

...

问题是每当我将一个新的 E 实例添加到 aSet 然后调用 session.saveOrUpdate(fInstance) 时,hibernate 都会使用“A”作为鉴别器字符串进行保存。当我尝试访问 F 实例中的 aSet 时,出现以下异常(为简洁起见,省略了完整的堆栈跟踪):

org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: path.to.class.A

我是否错误地映射了类?我应该如何映射多个继承级别?

感谢您的帮助!

最佳答案

我找到了解决方案,所以我想我会把它贴在这里以防其他人遇到这个问题。

事实证明,C 类上的额外注释导致了问题。当我摆脱除实体以外的所有内容并让所有其他类保持原样(具有适当的鉴别器值)时,一切正常。

@Entity
public class C extends A
...

关于java - hibernate 映射中的 2 级继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869695/

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