线程“main”中的异常org.hibernate.TransactionException:不支持嵌套事务

时间:2014-06-08 12:46:27

标签: java eclipse hibernate

这是我的模型类。我们使用setter和getters方法来初始化变量:

package org.koushik.javabrains.dto;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class UserDetails {
    @Id 
    private int userId;
    private String userName;
    public int getUserId() {
         return userId;
    }
    public void setUserId(int userId) {
         this.userId = userId;
    }
    public String getUserName() {
            return userName;
    }
    public void setUserName(String userName) {
            this.userName = userName;
    }    
}

这是我的模型对象,并为模型类中创建的变量赋值:

package org.koushik.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
//import org.hibernate.Transaction;
import org.koushik.javabrains.dto.UserDetails;

public class HibernateTest {
    public static void main(String arg[])
    {
        UserDetails user = new UserDetails();
        user.setUserId(1);
        user.setUserName("First User");

        SessionFactory sessionFactory = new Configuration().configure()
                                        .buildSessionFactory();
        Session session = sessionFactory.openSession();

        session.beginTransaction();
        session.save(user);
        session.beginTransaction().commit();
    }
}

2 个答案:

答案 0 :(得分:2)

替换

session.beginTransaction().commit(); 

session.getTransaction().commit();

注意使用Spring @Transactional将无需自行管理交易

答案 1 :(得分:0)

您正试图通过调用begin transaction

在事务中开始事务

再次提交时,会导致上述异常。

并且消息清楚地表明不支持嵌套事务。

所以

为下面的会话创建单个事务,并使用相同的会话完成您的会话

Transaction tx = session.beginTransaction();

session.save(user);

tx.commit();