通過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中的對象時用對象數組接,因為返回的是兩個對象:
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對象了。
posted on 2007-07-18 11:25
CoderDream 閱讀(2461)
評論(1) 編輯 收藏 所屬分類:
經驗點滴