xih  
日历

导航

常用链接

留言簿(2)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

2009年3月30日

在查询时报下面的错误,使用的是hibernate,oracle数据库,并做了集群
WARN - SQL Error: 17002, SQLState: null
ERROR - Io 异常:Software caused connection abort: recv failed
请问是什么原因造成的,谢谢!

posted @ 2010-09-02 10:37 费思量 阅读(506) | 评论 (0)编辑 收藏
 
   参考hibernate对hql语句的解析,写了对SQL语句的解析,并生成相应的对象。主要为了自定义查询条件进行查询和对查询结果进行二次查询使用。目前只支持简单的sql语句的解析,不支持子查询的解析。在压缩包中只给出了解析程序,没有包括对应的查询对象。链接:程序源码
posted @ 2009-04-01 11:34 费思量 阅读(415) | 评论 (0)编辑 收藏
 
项目要求能获得CONNECTION便于对数据库的操作,并要求能与spring中的事务处于同一事务中。实现:
1.定义SanHibernateTransactionManager类,继承spring中的
HibernateTransactionManager,便于获得HibernateTransactionObject。把这个类注入到spring容器中。
< bean  id ="transactionManager"
        class
="com.san.tools.hibernate.SanHibernateTransactionManager" >
        
< property  name ="sessionFactory" >
            
< ref  bean ="sessionFactory" />
        
</ property >
    
</ bean >

 
public class SanHibernateTransactionManager extends HibernateTransactionManager{

    
public Object getTransactionObj(){
        
return super.doGetTransaction();
    }

    
        
    
public boolean existsTransaction(Object transaction){
        
return super.isExistingTransaction(transaction);
    }

    
    
public Session getSession(){
        
return SessionFactoryUtils.getSession(this.getSessionFactory(), true);
    }

    
    
public Session getCurrentSession(){
        HibernateTransactionObject obj 
= (HibernateTransactionObject)this.getTransactionObj();
        
return obj.getSessionHolder().getSession();
    }

}

2.开始事务。
public   void  beginTransaction()  throws  SQLException {
        
// TransactionDefinition.PROPAGATION_REQUIRED:支持当前的事务,如果不存在就创建一个新的。

        DefaultTransactionDefinition transactionDef  =   new  DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
        
// 创建一个TransactionStatus

        TransactionStatus transactionStatus  =  transactionManager.getTransaction(transactionDef);
        
//
取得绑定到当前线程上的session。从HibernateTransactionObject中获得,这里修改了spring中HibernateTransactionManager.java文件,
        
// 将private HibernateTransactionObject改为protected HibernateTransactionObject

        Session session  =  transactionManager.getCurrentSession();
      
if (session  !=   this .session)
{
            System.err.println(
" session不是同一对象 "
);
        }

        
// 将transactionStatus保存到集合中
         this .transactionStatuss.add(transactionStatus);
        
this .beginTransaction  =   true
;
    }
3.提交事务
public   void  commit()  throws  HibernateException,SQLException {
        
// 循环TransactionStatus集合,直至第一个transactionStatus被提交时,才真正提交

         for ( int  i  =  transactionStatuss.size()  -   1 ;i  >=   0 ;i -- ) {
            DefaultTransactionStatus transactionStatus 
=
 (DefaultTransactionStatus)transactionStatuss.get(i);
            transactionManager.commit(transactionStatus);
        }

        transactionStatuss.clear();
    }
4.回滚事务
public void rollBack(){
        
for(int i = transactionStatuss.size() - 1;i >= 0;i--){
            DefaultTransactionStatus transactionStatus 
= (DefaultTransactionStatus)transactionStatuss.get(i);
            transactionManager.rollback(transactionStatus);
        }

        transactionStatuss.clear();
    }
       贴出这段代码一是为了共享一点所得,二是希望能指出中间有什么不正确的地方(心里不是很有底)
posted @ 2009-03-30 15:32 费思量 阅读(530) | 评论 (1)编辑 收藏
 
Copyright © 费思量 Powered by: 博客园 模板提供:沪江博客