HSQL 中的左联查询

HSQL 中的左联查询
通过T-SQL,我们左联(内联、右连类似)的查询语法如下:

--  通過 InsuredIn 查詢 累計類別 

select   *   from  ris.re_master  as  rm  left   join  ris.re_detail  as  rd  on  rm.REINSURANCE_NO = rd.REINSURANCE_NO
    
where  rd.INSURED_ID = ' A120670116 '
    
order   by  rm.POLICY_NO  asc , rm.POLICY_SEQNO  asc
    ;


但是使用 HSQL 查询数据库时,我们要改为:

from  ReMaster  as  rm  left   join  rm.reDetails  as  rd 


Hibernate 会自动找相同的键,不用on,而且关联表要写成:rm.reDetails


/**
 * description: 通過被保人號碼查詢再保明細
 * 
 * 
@param  insuredId
 *            被保人身份證號 String
 * 
@return  List 結果列表
 * 
@throws  DbAccessException
 *             數據庫異常
 
*/
public  List selectReMasterDetail(String insuredId) 
    
throws  DbAccessException {
    
if  (DEBUGLOG.isDebugEnabled()) {
        DEBUGLOG.debug(
" [ReDetailDao] "
                
+   " [Function:selectReMasterDetail][Begin] " );
    }
    StringBuffer hqlRd 
=   new  StringBuffer();

    hqlRd.append(
"  from ReMaster as rm left join rm.reDetails as rd  "   +
            
" where 1=1 " );

    
if  (insuredId  !=   null ) {
        hqlRd.append(
"  and rd.insuredId = ' "   +  insuredId  +   " ' " );
    }
    
    hqlRd.append(
"  order by rm.policyNo asc, rm.policySeqno asc " );

    
if  (DEBUGLOG.isDebugEnabled()) {
        DEBUGLOG.debug(
" [ReDetailDao][Function:selectReMasterDetail][End] " );
    }
    
    
return   this .createQuery(hqlRd.toString());
}

在Service层进行调用:
//  通過 InsuredId 查詢ReMaster檔和ReDetail檔
rmdList  =  rdDao.selectReMasterDetail(iqVo.getInsuredId());

取List中的对象时用对象数组接,因为返回的是两个对象:

HSQL 中的左联查询_第1张图片

    Object[] obj  =   null ;
    ReDetail rd 
=   null ;
    ReMaster rm 
=   null ;
    
int  rmdSize  =   0 ;
    
if  (rmdList  !=   null ) {
        rmdSize 
=  rmdList.size();
    }
    
for  ( int  rmdIndex  =   0 ; rmdIndex  <  rmdSize; rmdIndex ++ ) {
        obj 
=   new  Object[ 2 ];
        obj 
=  (Object[])rmdList.get(rmdIndex);
    
        rm 
=   new  ReMaster();  //  用於存儲公司別信息
        rd  =   new  ReDetail();
        rm 
=  (ReMaster) (obj[ 0 ]);
        rd 
=  (ReDetail) (obj[ 1 ]);

这样就可以处理得到的ReMaster对象和ReDetail对象了。

你可能感兴趣的:(HSQL 中的左联查询)