我正面对我的第一个大项目"我的数据结构非常复杂,因此我逐个构建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)
没有给我很多信息来查看错误的位置,因为在构建持久化上下文时会抛出异常。
如何弄清楚错误的位置?
答案 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 = ...)
注释)。以下是检查的好消息来源: