我是hibernate的新手并尝试在数据库中保留一个简单的对象。数据将保存在表中,但随后抛出以下异常。 引起:org.hibernate.TransactionException:事务未成功启动
这是我的代码,请帮助!
@Transactional
public void addEmployee(Employee empObj) {
System.out.println(">>>>>>>>>>>in DAO");
Transaction tx = null;
Session session=sessionFactory.getCurrentSession();
try{
tx=session.beginTransaction();
session.save(empObj);
tx.commit();
}
catch (HibernateException e) {
if (tx!=null)
tx.rollback();
e.printStackTrace();
}
}
答案 0 :(得分:0)
您所要做的就是更改方法代码,如下所示:
@Transactional
public void addEmployee(Employee empObj) {
Session session=sessionFactory.getCurrentSession();
session.save(empObj);
}
如果您确实已经使用Spring配置了Hibernate - 正如我猜测的那样,从异常开始 - 然后Hibernate Platform Transaction Manager拦截方法调用(由@Transactional
隐含)并自动为您启动事务。由于每个会话已经打开了一个事务,因此无法打开一个新事务。
答案 1 :(得分:0)
这是因为你正在混合hibernate和spring事务。
@Transaction
是弹簧AOP和剂量自动交易处理的一部分。你必须在代码中只使用一种事务类型,你可以删除任何一种。