PersistenceException 中的模糊消息:无法构建 Hibernate SessionFactory

Ambiguous message in PersistenceException: Unable to build Hibernate SessionFactory

我面临我的第一个 "big project",我的数据结构非常复杂,所以我正在一个一个地构建我的 @Entity classes 并测试我的所有操作一个TDD process。此外,我正在使用 hibernate-entitymanager(取决于 hibernate-core)生成内存中的 HSQLDB,而不依赖于 真实数据库连接 。但我收到以下错误:

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)

最后一个是我的class。问题是消息 Unable to build Hibernate SessionFactory 没有给我太多信息来查看错误可能在哪里,因为在构建持久性上下文时会抛出异常。

我怎样才能知道错误可能出在哪里?

当您遇到特定异常时,堆栈跟踪很有用。通常,Hibernate 会抛出带有有用消息的异常,但它们被包装在调用堆栈 方法的某处 (我不知道这是不是正确的术语,但我指的是堆栈跟踪),最后你得到一个 PersistenceException 和那个消息。

所以在这些情况下,检查堆栈底部方法的源代码很有用,在这种情况下 org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1134)(当然,你手头必须有源代码,这是小菜一碟Maven and the IDE of your preference, mine is NetBeans)。在这种情况下,如果转到 CollectionBinder.java 的相应行,您可以看到以下内容:

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

因此请检查您所做的最后一个 @OneToMany and/or @ManyToMany 注释及其在关系反面的配置方式(实体 class 与 @ManyToOne@ManyToMany(mappedBy = ...) 注释)。这里有很好的来源可供检查: