遇到 主表 和 许多 关联表的 条件查询 问题 .
主表 之中只有 一条记录 ,但是关联的 附加表 可能存在多条 记录.
开始的时候 使用左连接 ,但是查询到 2 条数据.
select * from tpublicpolicy tp
left join Muster tm on tp.policyId = tm.policyId
XXXXXXXXXXXXXXXXX
然后,改成使用IN的子查询。
select * from tpublicpolicy tp
where tp.policyId in(
select policyId from Muster XXXXXXXXXX
)
XXXXXXXXXXXXXXX
成功查询。
最后还发现, IN 查询 比左连接快 。
但是,发现最后 填充 附加信息的时候 很耗时,因为是循环每个 保单去 添加 附加信息的。
但是Hibernate 之中之前没有 建立好关联, 不能自动 带出附加信息 。
为了 减少查询次数 ,想到 一次将所有的 数据全部查询出来。
也就是采用如下的方式 :
//查询保障信息集合 String hql = "from TPolicyEnsureTemporary where publicPolicyId in (:pidlist)"; Query query = session.createQuery(hql); query.setParameterList("pidlist", pIdList); List<PolicyEnsureTemporary> ensureList = this.TPolicyEnsureTrVO(query.list()); /** * 根据PolicyID从list获得保单保障临时表对象 * * @param policyId * @return rstList * @throws Exception */ public List<PolicyEnsureTemporary> queryPolicyEnsureList (List<PolicyEnsureTemporary> ensureList, int policyId) throws Exception { List<PolicyEnsureTemporary> rstList = new ArrayList(); if(null == ensureList || ensureList.size() <= 0){ return rstList; } for(PolicyEnsureTemporary pe : ensureList){ if(pe.getPublicPolicyId().equals(policyId)){ rstList.add(pe); } } return rstList; }
到内存之中 去分拆 到每个 保单对象 。
这样 ,有几个 附加对象 就查询 几次 可以了 ,不用循环去查询耗费时间 。