想要在单个休眠事务中从文件夹中删除数据库值和文档

Want to delete database value and document from folder in a single hibernate transaction

我想知道事务是否适用于执行数据库查询的文档删除?我是 hibernate 查询的新手 transaction.I 想从数据库中删除文档详细信息 table 并且同时必须从 document.If 中删除特定文档 在文档删除中没有发生删除,那么数据库值删除明智 versa.I 认为这可以使用 transaction.I 来完成,这适用?或者我的问题有什么解决方案吗?我尝试使用事务 code.But 它显示事务未成功启动异常。

谢谢

在我的 DAOHibernateImplimentation 中 class

getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(final Session session)throws HibernateException, java.sql.SQLException {

Transaction tx = null;
int deleteStatus=0;
try {
    tx = session.beginTransaction();
    final String deleteQuery = "delete from tablename where name='"+name+"'";                                       
    deleteStatus = (Integer)getHibernateTemplate().execute(new HibernateCallback(){
    public Object doInHibernate(final Session session) throws HibernateException, java.sql.SQLException
    {
    Query query = session.createSQLQuery(deleteQuery);                                              
    return query.executeUpdate();
    }
      });
    if(deleteStatus>0){
        file.delete();
        }   
     tx.commit();                                                                        
    } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
                }       
                return deleteStatus;    
    }

});

例外情况是:

17:09:30,447 ERROR [STDERR] org.springframework.transaction.TransactionSystemException: Could not commit      Hibernate transaction; nested exception is org.hibernate.TransactionException:    Transaction not successfully started
17:09:30,447 ERROR [STDERR]     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:562)
17:09:30,447 ERROR [STDERR]     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
17:09:30,447 ERROR [STDERR]     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632) 

似乎 getHibernateTemplate().execute ... 没有在交易中执行。就像这里描述的那样 Hibernate transaction not successfully started 可能没有什么可提交的。我建议您删除 HibernateCallback 并直接执行查询。

编辑。像这样!

getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(final Session session)throws HibernateException, java.sql.SQLException {

  Transaction tx = null;
  int deleteStatus=0;
  try {
      tx = session.beginTransaction();
      final String deleteQuery = "delete from tablename where name='"+name+"'";                                       

      Query query = session.createSQLQuery(deleteQuery);                                              
      deleteStatus = query.executeUpdate();

      if(deleteStatus>0){
          boolean deleted = file.delete();
          if(!deleted)
             throw new IOException("Error deleting");
       }   
       tx.commit();                                                                        
  } catch (Exception e) {
      tx.rollback();
      e.printStackTrace();
  }       
  return deleteStatus;    


});

您需要检查 file.delete() 调用的 return 值。 (参见 JavaDoc)

尝试使用 TransactionTemplate

TransactionTemplate transactionTemplate=new TransactionTemplate();
transactionTemplate.execute(new TransactionCallback() {
    @Override
    public Object doInTransaction(TransactionStatus status) {
    int deleteStatus = 0;
        try {
   final String deleteQuery = "delete from tablename where name='" + name + "'";
   deleteStatus = (Integer) getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(final Session session) throws HibernateException, java.sql.SQLException {
   Query query = session.createSQLQuery(deleteQuery);
   return query.executeUpdate();
         }
     });
 if (deleteStatus > 0) {
       file.delete();
        }
 } catch (Exception e) {
    e.printStackTrace();
       }
     return deleteStatus;
  }
});