gpt4 book ai didi

hibernate - 如何在 hibernate 状态下检查 session 是否已经打开事务?

转载 作者:行者123 更新时间:2023-12-04 21:44:02 25 4
gpt4 key购买 nike

我的要求是我想执行数据库操作。
所以,我在做...

Public boolean myFunction(){
Session session = sessionFactory.getCurrentSession();
if(session!=null){
if (tx != null) {
Transaction tx = session.beginTransaction();
//Perform database operation...
tx.rollback();
if (session.isOpen()) {
session.close();
}
tx = null;
session = null;
}
}else{
return;
}
}

当我的 session 不包含任何以前未提交/未回滚的事务时,这很有效。

现在,问题场景来了……

场景:

有一项服务...称为 myFunction() 并且该服务在 session 中已经有一个事件事务。

问题:
当 myfunction() 执行 tx.rollback()... 它也回滚了父级的事务。
1.) Why this happen???
2.) Is there nay way to determine... weather hibernate session contains any previous open/uncommited/active/unrolledback/continue transaction?

我试过了...
Public boolean myFunction(){
Session session = sessionFactory.getCurrentSession();
if(session!=null){
if (tx != null) {
boolean isAlreadyTransactionStarted = sessionFactory.getCurrentSession().getTransaction().isActive();
if(isAlreadyTransactionStarted){
Transaction tx = sessionFactory.getCurrentSession().getTransaction();
}else{
Transaction tx = session.beginTransaction();
}
//Perform database operation...
if(isAlreadyTransactionStarted){
tx.rollback();
if (session.isOpen()) {
session.close();
}
tx = null;
session = null;
}else{
//Nothing to do...
}
}
}else{
return;
}
}

但在这种情况下
1.) When parent call contains any active transactions then isAlreadyTransactionStarted becomes true.

2.) But in the case call which does not contains any transaction, also isAlreadyTransactionStarted becomes true.

我的问题还是一样:

有没有办法确定...天气 hibernate session 包含任何以前的打开/未提交/事件/未回滚/继续事务?

最佳答案

你可以使用 Session.isDirty() 吗?

关于hibernate - 如何在 hibernate 状态下检查 session 是否已经打开事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17693532/

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