PersistenceException中的歧义消息:无法构建Hibernate SessionFactory

时间:2016-05-26 20:23:47

标签: hibernate orm jpa-2.0

我正面对我的第一个大项目"我的数据结构非常复杂,因此我逐个构建count1 = LOC.Length; 类并使用TDD process测试我的所有操作。另外,我使用@Entity(取决于hibernate-entitymanager)来生成内存中的HSQLDB,而不依赖于真正的数据库连接。但我收到以下错误:

hibernate-core

最后一个是我的班级。问题是消息javax.persistence.PersistenceException: [PersistenceUnit: sigeaPU] Unable to build Hibernate SessionFactory at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1134) at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:793) ... javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39) at ar.edu.unt.sigea.commontest.RepositorioBaseTest.iniciarDBTest(RepositorioBaseTest.java:16) 没有给我很多信息来查看错误的位置,因为在构建持久化上下文时会抛出异常。

如何弄清楚错误的位置?

1 个答案:

答案 0 :(得分:1)

当您面对特定异常对堆栈跟踪有用时。一般来说,Hibernate会抛出有用消息的异常,但它们会被包含在方法调用堆栈中的某个地方(我不知道这是否是正确的术语,但我的意思是所有的

跟踪中提到的方法),最后得到一条带有该消息的PersistenceException

因此,在这些情况下,检查堆栈底部的方法的源代码是有用的,在这种情况下org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1134)(当然,您必须拥有手头的源代码,它&#39 ;带有Maven的小蛋糕和您喜欢的IDE,我的是NetBeans)。在这种情况下,如果您转到CollectionBinder.java的相应行,则可以看到以下内容:

throw new AnnotationException(
    "Use of @OneToMany or @ManyToMany targeting an unmapped class: " + path + "[" + collType + "]");

因此,请检查您所做的最后一个@OneToMany和/或@ManyToMany注释以及它在关系的反面配置的方式(具有@ManyToOne的实体类或@ManyToMany(mappedBy = ...)注释)。以下是检查的好消息来源: