我正在尝试在我的 Java EE 7 应用程序中从 EclipseLink 迁移到 Hibernate,并遇到了一些我无法弄清楚的问题。
这是我的环境:
- 玻璃鱼 4.1
- 休眠 4.3.6
- Java 1.8.0_20
我也在使用:
- EE 7
- CDI
- JPA 2.1
最终我们的目标是能够使用 Java 8 Streams 和 Lambdas,因为我们的应用程序有很多集合操作,而 EclipseLink 目前不支持 Streams。我们有另一个使用 Hibernate(在 Wildfly 上)运行的项目可以做到这一点,但希望我们可以迁移到 Hibernate 而不是交换整个 Java EE 应用程序服务器堆栈。
到目前为止,这是我所做的,但主要遵循这里的指导:https ://coderwall.com/p/e5fxrw
我已将所需的实体管理器 Hibernate jar 安装到我的 /glassfish/lib 目录中。
我在 persistence.xml 中修改了我的持久化单元,如下所示:
<persistence-unit name="mypu" transaction-type="JTA"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <jta-data-source>jdbc/myds</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.SunOneJtaPlatform" /> <property name="hibernate.transaction.factory_class" value="org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit>
现在我得到的第一个异常是“java.lang.IllegalArgumentException:不是实体:......”但是我的类都用@Entity注释,并且在EclipseLink下工作。我认为我不应该用 exclude-unlisted-classes = false 列出我的类,并且真的很想避免这种情况。
编辑:根据 unwichtich 的建议,我尝试添加:
<property name="hibernate.archive.autodetection" value="class, hbm"/>
并在persistence.xml中单独指定PU中的类,没有任何改进。
感谢您的任何帮助。