关联查询 转换 成 IN 查询

遇到 主表 和 许多 关联表的 条件查询 问题 .

主表 之中只有 一条记录 ,但是关联的 附加表 可能存在多条 记录.

开始的时候 使用左连接 ,但是查询到 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;
 }




 

 

 

到内存之中 去分拆 到每个 保单对象 。

 

这样 ,有几个 附加对象 就查询 几次 可以了 ,不用循环去查询耗费时间 。

 

 

你可能感兴趣的:(Hibernate)