我有两个表,我正在使用 hibernate 来保存数据。如果最后一个表在保存过程中出现一些错误,我想回滚所有表中的事务。
例如,我有两个表,分别命名为 Term 和 Card Acceptor,我将数据一一保存在其中。以下是两个表的函数:
@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;
}
如果条款表中有错误,此代码不会回滚卡接受器。请帮忙,如何实现此目的...
最佳答案
我认为你误解了交易系统。
一笔交易应该是ACID (Atomicity, Consistency, Isolation, Durability) 。
提交事务后,更改就完成了,您必须手动撤消它。如果您希望链接 Term 和 CardAcceptor,则只需打开 1 个事务,保存这两个对象,然后提交。
关于java - 回滚所有以前的 hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033595/