记录一下工作中遇到的问题和解决办法。
最近遇到是一个问题就是通过Hibernate查询多个表,每个表中取几个字段。在这里记录一下解决的办法,和大家交流。
分割线
--------------------------------
一、先跟大家交代一下用到的实体类
LogEnt 记录用户访问企业实体
public class LogEnt{
private String id;
private String lcid;//访问企业id
private String userId; //用户id
private Date timestamp; //访问时间
}
User 用户
public class User{
private String userId; //主键
private String mobile; //手机号
private String state; //用户状态
...
}
实体都是只写了用到的属性。
二、实现功能
查询在选定的时间段内,用户每天访问的企业数量(不包括重复访问的企业)
三、思路
1、使用Hibernate执行原生sql语句查询多个表实现
2、创建一个包含所需要属性的实体,使用hql实现(界面所需要的属性 用户手机号、访问时间(精确到天)、每天访问次数),没有实现分页功能,使用hql语句查询总记录数
四、实现
(1)、使用Hibernate执行sql实现
//用户手机号、 开始时间、 结束时间、 访问次数
public Page observe(String mobile,String from,String to,String number,Page page){
boolean flag = true;
DetachedCriteria logEntCriteria = DetachedCriteria.forClass(LogEnt.class);
String sql = "select b.mobile,a.timestamp, count(DISTINCT a.lcid) from log_ent a,user b where a.userid = b.userId and b.state = '1' ";
//根据手机号查询用户Id
if(!StringUtils.isEmpty(mobile)){
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.a