Java 回滚所有以前的hibernate事务
我有两个表,我正在使用hibernate保存数据。如果最后一个表在保存过程中出现错误,我希望从所有表回滚事务 例如,我有两个表,分别命名Term和card acceptor,并将数据逐个保存在其中。以下是两个表的功能:Java 回滚所有以前的hibernate事务,java,spring,hibernate,hibernate-criteria,rollback,Java,Spring,Hibernate,Hibernate Criteria,Rollback,我有两个表,我正在使用hibernate保存数据。如果最后一个表在保存过程中出现错误,我希望从所有表回滚事务 例如,我有两个表,分别命名Term和card acceptor,并将数据逐个保存在其中。以下是两个表的功能: @Autowired private SessionFactory sessionFactory; Transaction tx = null; public SessionFactory getSessionFactory() { return sessionFac
@Autowired
private SessionFactory sessionFactory;
Transaction tx = null;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public TmCardAcceptor saveCardAcceptor(TmCardAcceptor cardAcceptor) {
// TODO Auto-generated method stub
// Acquire session
Session session = sessionFactory.openSession();
// Save employee, saving behavior get done in a transactional manner
//session.save(cardAcceptor); //previous method
try {
tx = session.beginTransaction();
session.save(cardAcceptor);
tx.commit();
} catch (HibernateException e) {
try{
tx.rollback();
}catch(RuntimeException rbe){
}
throw e;
} finally{
if(session!=null){
session.close();
}
}
return cardAcceptor;
}
@Override
public Term saveTerm(Term term) {
// TODO Auto-generated method stub
// Acquire session
Session session = sessionFactory.openSession();
// Save employee, saving behavior get done in a transactional manner
//session.save(cardAcceptor); //previous method
try {
tx = session.beginTransaction();
session.save(term);
tx.commit();
} catch (HibernateException e) {
try{
System.out.println("Rolling back Term");
tx.rollback();
}catch(RuntimeException rbe){
}
throw e;
} finally{
if(session!=null){
session.close();
}
}
return term;
}
如果术语表中有错误,则此代码不会回滚卡接受者。。请帮助,如何实现这一点…我想你误解了交易系统 一笔交易应该是
一旦您提交了事务,更改就完成了,您必须手动撤消它。如果要链接术语和CardAcceptor,则只需打开一个事务,保存两个对象,然后提交。是否有一个方法同时调用这两个方法?@XtremeBaumer是,这两个方法都是从另一个类的同一个函数调用的。然后在该方法内处理事务OHK@XtremeBaumer,那么你的意思是我应该使用该方法进行回滚吗?是的,你只能回滚事务,除非它们已提交
。还有事务嵌套,但这可能会变得非常复杂,尤其是在手动处理时。当您使用hibernate和spring时,请研究事务性。它可以使生活更加轻松,因此两个不同的事务不能回滚?事务1的回滚不应影响事务2的结果,您的工作必须是原子的。在某些情况下,当您处理多个源(例如一个数据源的两个不同数据源和一个JMS连接)时,您希望事务1和事务2立即提交或回滚。然后,您必须使用外部事务管理器并使用功能。但这不是你的情况