第一次遇到这个错误我用t条件包围了我的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;
功能1
  ....
    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();
    }
   .....
功能2
 .....
 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();
        }
  ....        
一种可能性是您在第二个函数中捕获的异常来自 后的代码,因此commit()您最终会尝试回滚已提交的事务,这是不允许的。
您可以尝试重新组织代码以确保提交后永远不会调用回滚。甚至可能是一些简单的事情,比如缩小内部 try-catch 的范围:
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();
    }
  } catch (Exception e) {
    tx.rollback();
    e.printStackTrace();
  }
  if(client.hasProduct(proId)){
    return client.getProduct(proId);
  }
  return false;
} finally {
  HibernateUtil.closeSession();
}
| 归档时间: | 
 | 
| 查看次数: | 7713 次 | 
| 最近记录: |