Hibernate在多个表上进行一对多连接

时间:2016-05-23 13:45:27

标签: java database hibernate calendar criteria

所以,我有一个名为app的课程。 app与名为user的类具有一对多关系。 user与名为login的类具有一对多关系。登录包含表示用户注销时间的字段,表示为时间戳。如果我想创建一个hibernate条件查询,返回在过去x天内已登录的用户,你会怎么做?这是我到目前为止所做的,它只是返回所有用户,无论他们何时登录:

Calendar calendar = Calendar.getInstance();
java.util.Date now = calendar.getTime();
java.sql.Timestamp currentTimestamp = new  java.sql.Timestamp(now.getTime());
Calendar calendar2 = Calendar.getInstance();
calendar2.roll(Calendar.DAY_OF_MONTH, days*(-1));
java.util.Date past = calendar2.getTime();
java.sql.Timestamp pastTimestamp = new java.sql.Timestamp(past.getTime());    
Criteria LoginCriteria = session.createCriteria(Application.class, "App")
                    .add(Restrictions.eq("App.appID", appid))
                    .createAlias("App.users", "user")
                        .createAlias("user.logins", "lg")
                        .add(Restrictions.ge("lg.endTime", pastTimestamp ))
                        .add(Restrictions.le("lg.endTime", currentTimestamp));

我正在使用时间戳来衡量时间。如果需要,我可以提供更多信息。

2 个答案:

答案 0 :(得分:0)

Criteria LoginCriteria = session.createCriteria(User.class, "user")
                .add(Restrictions.eq("user.appId", "https://"+appid+".com"))
                .createAlias("user.logins", "lg")
                .add(Restrictions.ge("lg.startTime", pastTimestamp ))
                .add(Restrictions.le("lg.startTime", currentTimestamp));

答案 1 :(得分:0)

或者我认为这应该有效,但我没有设置你的结构来测试它:

Criteria LoginCriteria = session.createCriteria(User.class, "user")
      .add(Restrictions.eq("user.appId", "https://"+appid+".com"))
      .createCriteria("logins")
           .add(Restrictions.ge("startTime", pastTimestamp))
           .add(Restrictions.le("startTime", currentTimestamp));