我正在尝试使用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中。
答案 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也找不到实体类。