gpt4 book ai didi

java - 使用单表继承时出现hibernate错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:13 25 4
gpt4 key购买 nike

如果我指定

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "tablename")

对于父类(super class),并且

@Table(name = "tablename")

对于子类,hibernate 在应用程序启动期间抛出异常(仅显示最终原因):

Caused by: org.hibernate.AnnotationException: Foreign key circularity dependency involving the following tables: 
at org.hibernate.cfg.Configuration.buildRecursiveOrderedFkSecondPasses(Configuration.java:1570)
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1511)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
... 98 more

正如您在上面的示例中看到的,它没有说明依赖循环涉及哪些表。

如果有人有任何建议可能是什么问题,我会非常高兴。

最佳答案

同时,我设法找到了问题所在。问题简单明了,只是异常消息毫无帮助。

问题的根源在于,有一个父类(super class)的父类(super class)(我们称之为基类),它被显式指定为@Inheritance(strategy = InheritanceType.JOINED),因为它的目的只是作为多类型对象的公共(public)抽象类。例如,它会指定一个公共(public)@Id字段、时间戳等。

必须被标记为@Entity,否则@Id声明将不起作用(并且必须为基类的每个子类指定一个@Id)。最终的解决方案似乎是我们必须这样做——为基类的每个子类单独指定 id,并且可能为基类的非单继承子类创建一个中间类,以避免大量克隆。

更新:很好的解决方案是使用@MappedSuperclass,因此父类(super class)不必是@Entity,但子类可以继承它们的字段和字段的注释,包括@Id。

关于java - 使用单表继承时出现hibernate错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26776052/

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