2

使用休眠:

@PersistenceUnit(unitName = "oracle")
private EntityManagerFactory emf;
@Resource
private UserTransaction u;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         EntityManager em = emf.createEntityManager();
try {
         u.begin();
         em.persist(some entity);
         u.commit();
     } catch (Exception e) {
         e.printStackTrace();
     }

这不会向数据库写入任何内容,如果我切换到 EclipseLink 它可以正常工作。
如果我使用

EntityTransaction et = em.getTransaction();

而不是UserTransaction休眠写入数据库。(所以不知何故,hibernate 看不到 JTA,就像 EclipseLink 一样)。



休眠有什么问题?(4.0.0-Final)谢谢

编辑:

我添加了最后 2 个属性:(我正在使用 glassfish)

<properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
    <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" />
</properties>

但仍然不起作用

4

3 回答 3

3

我删除了最后两个属性,因为它们不是必需的。
我的问题是我在 外部创建 EM u.begin(),我应该在事务或调用内部创建它em.joinTransaction()

谢谢:

我从这里得到了答案: Hibernate JPA with JTA and Glassfish Application Server 似乎没有提交

于 2012-05-21T07:24:05.960 回答
0

确保 Hibernate 将知道 JTA 事务管理器将自己登记为事务资源。

将 *hibernate.transaction.factory_class* 属性配置为org.hibernate.transaction.JTATransactionFactory并将 *hibernate.transaction.manager_lookup_class* 属性配置为您的服务器的事务管理器查找类,例如org.hibernate.transaction.JBossTransactionManagerLookup,或者实现您的通过从org.hibernate.transaction.JNDITransactionManagerLookup继承来拥有。

示例hibernate.properties

hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = org.hibernate.transaction.JBossTransactionManagerLookup

请参阅Hibernate 参考文档,第 3.3 节。JDBC 连接了解更多信息。

于 2012-05-20T21:45:45.820 回答
0

对我来说,它只有在我删除以下行后才开始正常工作:

<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
于 2012-10-03T07:25:36.740 回答