2

我是hibernate的初学者。当我试图将对象保存到表不存在的数据库中时。我在 org.rk.hibernate.HibernateTest.main(HibernateTest.java: 20)

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

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 .. 请帮助

4

3 回答 3

17

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

像这样:

try {
    // create session
    tx = session.beginTransaction();
    // do something
    tx.commit();
} catch (Exception exp) {
    tx.rollback();
    // close session
}
于 2013-08-15T10:37:27.207 回答
8

为了避免 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
}
于 2014-02-11T08:51:20.343 回答
0

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

  1. 交易 txn=session.beginTransaction();

另一个是

  1. 休眠事务管理器。

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

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

于 2017-10-11T09:35:09.703 回答