gpt4 book ai didi

java - 事务未成功启动(而 tx.commit() 被 if 条件包围)

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:47 25 4
gpt4 key购买 nike

我第一次遇到这个错误时,我用 if 条件包围了我的 tx.commit(),但我不确定为什么我仍然收到这个错误。

Struts Problem Report

Struts has detected an unhandled exception:
Messages:
Transaction not successfully started
File: org/hibernate/engine/transaction/spi/AbstractTransactionImpl.java
Line number: 200
Stacktraces
org.hibernate.TransactionException: Transaction not successfully started

org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:200)

用户选择产品后,在我的主要功能中,我将调用以下两个功能。

第一个函数用于检索所选产品的对象。第二个函数用于检查所选用户是否拥有该产品,因此如果客户拥有该产品则返回 true 否则返回 false;

函数一

  ....

Product pro = new Product();
final Session session = HibernateUtil.getSession();
try {
final Transaction tx = session.beginTransaction();
try {

pro = (Product) session.get(Product.class, id);

if (!tx.wasCommitted()) {
tx.commit();
}
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
}
} finally {
HibernateUtil.closeSession();
}
.....

函数二

 .....
final Session session = HibernateUtil.getSession();
try {
final Transaction tx = session.beginTransaction();
try {
User user = (User) session.get(User.class, id);

if (!tx.wasCommitted()) {
tx.commit();
}

if(client.hasProduct(proId)){
return client.getProduct(proId);
}
return false;
} catch (Exception e) {
tx.rollback(); <<<Error is on this line
e.printStackTrace();
}
} finally {
HibernateUtil.closeSession();
}
....

最佳答案

看看Transaction.isActive()方法。您可以使用条件包装对 rollback() 方法的调用,检查事务是否仍处于 Activity 状态。第二,我更喜欢以下代码:

final Session session = HibernateUtil.getSession();
try {
final Transaction tx = session.beginTransaction();
// do things
tx.commit();
} finally {
if (tx.isActive()) {
try {
tx.rollback();
} catch (Exception e) {
logger.log("Error rolling back transaction", e);
}
}
try {
session.close();
} catch (Exception e) {
logger.log("Error closing session", e);
}
}

当然,finally 部分的代码最好包装成公共(public)静态方法,然后在每个 finally 中调用它。

顺便说一句,你为什么要在交易之外做一些事情?我通常所有事情都完成后提交,以实现更好的一致性并避免 LazyInitializationException

关于java - 事务未成功启动(而 tx.commit() 被 if 条件包围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183174/

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