public class User{
private int userId;
private String userName;
}
<set name="UserPic" inverse="true" >
<key column="userId"/>
<one-to-many class="UserPic" />
</set>
public UserPic{
private int picId;
private String Title;
private String userPicPath;
private byte biaoZu;
}
<many-to-one name="User" cascade="delete"
class="User" column="userId" />
biaoZu默认为0
我想以分页的方式列出每个人一张图片,如果这个人对应的多个UserPic中有一个biaoZu为1,就列出对应的图片,如果这个人对应的多个UserPic中,biaoZu全部为0,就列出picId最大的图片,请问高手,HQL应该怎么写才比较有效率
如果太麻烦不分页也行,谢谢,在线等。
------解决思路----------------------
感觉有点麻烦 就不自己试了
写出高效率的hql,这个确实难度大,先确保能正确性吧
思路是分两次向数据库查
第一次查biaoZu为1
第二次差biaoZu为0的
dao层合并

------解决思路----------------------
如果你用纯粹sql的,首先你需要的是一个列表 ,每列是 {user信息,正确的一张pic}。所以你就不用from user了。直接按照
select * from UserPic p where userid=? order by biaoZu,picId desc limit(0,1)来执行。
如果查询的信息不够,就关联user表查询
select * from (select a.username,b.picId from user a,UserPic b where a.userid=b.userid order by b.biaozu,b.picId desc limit 0,1) t order by t.username;之类的~~
数据库不支持limit就换join或者其他的方法。前台分页需要的什么类型的list,就按照那个样式add 进去。
hql具体实现是可以的,但是会查询无用的信息,效率也是个问题,就比如你给的那个,hibernate不是万能的,这也是为什么mybatis能存活下来的一个原因
------解决思路----------------------
比如说这个方法:
/**
* 是否已过期
*
* @return 是否已过期
*/
@Transient
public boolean isExpired() {
return getExpire() != null && new Date().after(getExpire());
}
isExpired 这个字段在数据库是不存在的,但是他是类的成员变量,然后里面加一些逻辑;
@Transient 该注解就表示他不关联数据库。