【问题标题】:hibernate-- org.hibernate.TransactionException: Transaction not successfully startedhibernate-- org.hibernate.TransactionException:事务未成功启动
【发布时间】:2013-08-15 10:30:43
【问题描述】:

我是hibernate的初学者。当我试图将对象保存到表不存在的数据库中时。我得到一个例外 org.hibernate.TransactionException:在 org.rk.hibernate.HibernateTest.main(HibernateTest.java:20) 的 org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:170) 处的事务未成功启动

这是我试图将对象保存到数据库中的类文件

package org.rk.hibernate;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.rk.dto.UserDetails;

public class HibernateTest {

    public static void main(String[] args) {
        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("GNS");
        try {       
            SessionFactory sf = new Configuration().configure().buildSessionFactory();
            Session session = sf.openSession();
            session.save(user);
            session.getTransaction().commit();
        }
        catch(HibernateException e) {
            e.printStackTrace();
            System.out.println("in exception");
        }
    }
}

我正在使用 oracle 11g 第 2 版和休眠 4.2.4 .. 请帮助

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我认为您没有在任何地方开始您的交易。您已经打开了一个会话,但在开始事务之前,您正在提交它。打开会话后尝试开始它。

    像这样:

    try {
        // create session
        tx = session.beginTransaction();
        // do something
        tx.commit();
    } catch (Exception exp) {
        tx.rollback();
        // close session
    }
    

    【讨论】:

    • begintransaction() 帮我插入数据库
    【解决方案2】:

    为了避免 org.hibernate.TransactionException 您可以使用以下代码。在提交之前,您可以控制它是否已提交。差异在第 5 行 !tx.wasCommited()

    try {
      // create session
      tx = session.beginTransaction();
      // do something
      if (!tx.wasCommitted()){
        tx.commit();
      }
    } catch (Exception exp) {
      tx.rollback();
      // close session
    }
    

    【讨论】:

    • 我试图提交两次,这段代码告诉我我的错误在哪里。谢谢。
    【解决方案3】:

    我添加了两个 TransactionManager ,一个是使用下面的代码创建的

    1. 事务 txn=session.beginTransaction();

    另一个是

    1. HibernateTransactionManager。

    我通过删除 Transaction txn=session.beginTransaction(); 解决了问题

    这样我的代码中只有一个事务管理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 2011-01-20
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      相关资源
      最近更新 更多