Hibernate错误“无法找到持久性”

时间:2016-04-15 23:39:37

标签: java hibernate maven jpa

我正在尝试使用Maven exec插件执行一些Java,并收到错误Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: my.biz.CoolEntity。在最终找到一个hacky修复程序之前,我尝试了许多失败的解决方案。基于hacky修复,我认为问题是运行时类路径错误。

我正在寻找一个答案,告诉我如何解决问题,而不是像在hacky修复程序中那样将所需文件复制到位。

背景

我有一个Maven项目“Project A”,它依赖于Hibernate 5.0.1.Final以及另一个项目“Project B”。项目B包含我的JPA实体类,包括my.biz.CoolEntity

通常,我将所有内容构建为带阴影的JAR并运行/部署,没有任何问题。

Hibernate问题

最近,我开始使用Maven的exec:java目标,但我遇到的是Hibernate问题。当我运行mvn exec:java -DmainClass=my.biz.CoolEntity时,我收到此错误:

Caused by: org.hibernate.UnknownEntityTypeException: Unable to locate persister: my.biz.CoolEntity
        at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792) ~[hibernate-core-5.0.1.Fi
nal.jar:5.0.1.Final]
        at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2641) ~[hibernate-core-5.0.1.Final.jar:5.0.1
.Final]
        at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) ~[hibernate-core-5.0.1.Final.jar:5.0.1.Final]
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2579) ~[hibernate-core-5.0.1.Final
.jar:5.0.1.Final]
        at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2566) ~[hibernate-core-5.0.1.Final
.jar:5.0.1.Final]
        at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) ~[hibernate-core-5.0.1.Final.jar:5.0.1.Final]
        at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) ~[hibernate-core-5.0.1.Final.jar:5.0.1.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1075) ~[hibernate-entitymanager-5.
0.1.Final.jar:5.0.1.Final] 

尝试失败

我尝试使用exec插件的<additionalClasspathElements><includePluginDependencies>。第一个解决方案没有导致任何不同,第二个解决方案导致编译时错误。

Hacky fix

最终为我工作的是将已编译的类从项目B复制到项目A中。

2 个答案:

答案 0 :(得分:0)

当实体驻留在不同的jar中时,您必须将其包含在persistence.xml中。 <jar-file>entities-packaged.jar</jar-file>。解释了不同的选项here

答案 1 :(得分:0)

当我们使用Hibernate 5罐时,我们得到

  

org.hibernate.UnknownEntityTypeException:无法找到持久性“。

我刚刚将hibernate jar版本从5改为4然后一切都很好。 即使在映射之后,Hibernate 5也找不到实体类。