Hibernate多表查询时候应该注意的地方:
可以使用left join。
关于嵌套查询:
select * from (select * from users) 这种方式在hibernate中是行不到通的,
另外注意查询的sql语句是基于hibernate的PO对象的,而不是数据库表。
嵌套查询的时候可以使用in关键字,而不是使用from 关键字
下面给一个具体的实力,结合 distinct进行查询,查询完成后还要进行统计,统计记录的条数:
sb.append("select distinct t1 from TblTaskManage t1 left join t1.tblTaskManageCombinations s "
+ " left join t1.tblTaskManageViewers v "
+ " where (s.combination.userId='" + userInfo.getUserId() + "'"
+ " or v.viewer.userId='" + userInfo.getUserId() + "'"
+ " or t1.taskExerciser.userId= '" + userInfo.getUserId()+"'"
+ " or t1.taskAssigner.userId= '"+ userInfo.getUserId() + "') ");
sb.append(" and t1.commOrgIdenty = '"+userInfo.getCommOrgIdenty()+"'");
public Long countNo(String sb){
Long totalCount = 0L;
if(sb!=null){
sb = StringUtils.substringBefore(sb, "order by");
sb = " select count(*) from TblTaskManage t where t.taskId in ("+sb+")";
try {
Number obj = (Number)this.createQuery(sb).uniqueResult();
totalCount = obj.longValue();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
return totalCount;
}