gpt4 book ai didi

java - 如果在不同表的多个事务中一个事务失败,在 hibernate 中是否可以回滚?

转载 作者:行者123 更新时间:2023-11-30 03:43:31 25 4
gpt4 key购买 nike

我有一种方法:

    // methods
private void transform(TransformList transformList) {
TableA tA = transformList.getTableA();
TableB tB = transformList.getTableB();
TableC tC = transformList.getTableC();

daoObj.saveA(tA);
daoObj.saveB(tB);
daoObj.saveC(tC);
}

现在,

    //saveA mehtod
public void saveA(TableA tA) {
Session session = Context.getHibernateSession();
try {
if(session != null) {
Transaction tx = session.beginTransaction();
tx.begin();
session.merge(tA);
tx.commit();
}

}catch (Exception e) {
tx.rollback();
throw new SomeException(e.getMessage());
}
finally{
if (session != null) {
session.clear();
}
}
}

同样,

    //saveB mehtod
public void saveB(TableB tB) {
Session session = Context.getHibernateSession();
try {
if(session != null) {
Transaction tx = session.beginTransaction();
tx.begin();
session.merge(tB);
tx.commit();
}
}catch (Exception e) {
tx.rollback();
throw new SomeException(e.getMessage());
}
finally{
if (session != null) {
session.clear();
}
}
}

并且,

        //saveC mehtod
public void saveC(TableC tC) {
Session session = Context.getHibernateSession();
try {
if(session != null) {
Transaction tx = session.beginTransaction();
tx.begin();
session.merge(tC);
tx.commit();
}
}catch (Exception e) {
tx.rollback();
throw new SomeException(e.getMessage());
}
finally{
if (session != null) {
session.clear();
}
}
}

现在在调用'transform'方法时,如果saveA和saveB方法成功,然后一些saveC方法出现异常,是否可以回滚TableA和TableB记录(已经提交)以及 TableC 记录?

最佳答案

没有。您将把事务处理至少提高一级:创建一个事务,并在该事务内调用 saveA()、saveB() 和 saveC()。不要在保存方法内处理事务。

当然,这只是一种可能。有些框架(例如 Spring)可以极大地帮助您管理事务。

关于java - 如果在不同表的多个事务中一个事务失败,在 hibernate 中是否可以回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com