集成 Hibernate-JTA-JPA-EJB-GlassFish-MySQL:1- Hibernate-JPA-EJB-GlassFish-MySql:本指南用于在 NetBeans.8.0 IDE 中集成 hibernate.4.3.5 和 EJB 和 GlassFish.4.0。在net beans中创建一个web项目,并在项目中添加hibernate jar文件,其他配置MySql和glassfish相关的设置非常简单,本文不再赘述,然后创建persistence.xml文件如下:
<persistence-unit name="omidashouriPU" transaction-type="Resource_Local">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="yourpassword"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
在用于创建 EntityManager 的 EJB 类(使用 @Stateless 注释的类)中,使用以下语法:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("omidashouriPU"); EntityManager em = emf.createEntityManager(); em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(YourEntityObject); em.getTransaction().end();
如您所知,当您使用“transaction-type="Resource_Local" 时,您必须自己管理事务,也就是说,管理事务的打开和关闭是我们的责任。
2- Hibernate-JPA-JTA-EJB-GlassFish-MySql:本指南用于在 NetBeans.8.0 IDE 中集成 hibernate.4.3.5 和 EJB 以及 JTA 和 GlassFish.4.0。在net beans中创建一个web项目(注意:不要用maven做web项目,因为Netbeans.8.0 IDE有bug)并在项目中添加hibernate jar文件,其他与配置MySql和glassfish相关的设置很简单(只需在 Resources>JDBC:JDBC Connection Pools & JDBC Resources 中定义 Connection Pool 和 JDBC,如果您搜索它,相关指南在 Web 中)(注意:要定义正确的 JNDI,首先创建一个依赖 JNDI 的临时项目,如 JPA glassfish项目,
<persistence-unit name="omidashouriPU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/yourJNDI (which you defined in glassfish) </jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="yourpassword"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
在用于创建 EntityManager 的 EJB 类(使用 @Stateless 注释的类)中,使用以下语法:
@PersistenceContext(unitName = " omidashouriPU ")
EntityManager em;
em.persist(YourEntityObject);
正如您所知道的,当您使用“transaction-type="JTA" 时,事务管理不在您身上,也就是说,管理打开和关闭事务是应用程序服务器(此处为 GlassFish)的责任。事实上,如果您在模式设计中检查您的 persistence.xml,在持久性提供程序下拉框前面,您可以看到现在添加了休眠。
亲爱的读者,我花了 3 天的时间来解决这个问题,请将您的经验添加到本文中以完成它,如有任何问题,您可以发送电子邮件至 omidashouri@gmail.com 给我。