我收到以下休眠异常:
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on cz.rohan.dusps.model.Switchport.konfiguracniTemplateAccess references an unknown entity: cz.rohan.dusps.model.KonfiguracniTemplate
org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:103)
org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
cz.rohan.dusps.helper.SessionFactoryHelper.initFactory(SessionFactoryHelper.java:122)
cz.rohan.dusps.helper.SessionFactoryHelper.getSessionFactory(SessionFactoryHelper.java:134)
cz.rohan.dusps.filter.HistorieZmenFilter.doFilter(HistorieZmenFilter.java:102)
cz.rohan.dusps.filter.CharsetFilter.doFilter(CharsetFilter.java:41)
在与不同的人一起解决这个问题大约 20 个小时后,阅读了所有可能的博客或论坛,我真的在这里绝望了。
这是一个中型项目。我应该提到数据库是 Postgres 9.1,我们使用建模工具生成数据库。Hibernate 连接到数据库但不生成它。
我在数据库中创建了一个新实体,称为“KonfiguracniTemplate”(配置模板)。我创建了模型、控制器、表单、验证器、.jsp,基本上都是从类似性质的现有实体中 1:1 复制的。我现在可以使用 KonfiguracniTemplate,CRUD 可以正常工作了。
当我从名为 Switchport 的实体中引用此 KonfiguracniTemplate 时,问题就出现了。在数据库中,两者之间存在关系:
- Switchport 1:1 ... 0:N KonfiguracniTemplate(switchport 总是引用一个 KonfiguracniTemplate;一个 KonfiguracniTemplate 可以被引用零次或多次)
- Switchport 具有此关系的 FK konfiguracniTemplateAccess_id。
在 .../model/Switchport.java 中,关系被映射,就像所有其他正在工作的关系一样:
@ManyToOne
@JoinColumn(nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
我尝试了各种形式:
@ManyToOne
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
或者
@ManyToOne(targetEntity=KonfiguracniTemplate.class)
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;
我还检查了:
- 两个实体都在同一个包中
- 它们都使用“import javax.persistence.Entity;”注释为“@Entity”
- 构建不会产生错误/警告消息
- 只要将Switchport中的引用注释掉就可以了
无论我尝试什么,我都无法摆脱“引用未知实体”异常。有人可以分享一下正在发生的事情或者如何调试问题吗?帖子顶部的堆栈跟踪是我在日志中得到的全部内容。
非常感谢所有输入!