2016-05-23 2 views
0

Итак, у меня есть класс под названием app. приложение имеет отношение «один ко многим» с классом, называемым пользователем. пользователь имеет отношение «один ко многим» с классом «login». Login содержит поля, представляющие время выхода пользователя из системы, выраженное как временные метки. Если бы я хотел сделать запрос критериев спящего режима, который возвращает пользователей, которые подписались за последние х дней, как бы вы это сделали? Это то, что я до сих пор, и он просто возвращает всех пользователей, независимо от того, когда они вошли в систему:Hibernate one-to-many объединяется на несколько таблиц

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)); 

Я использую временные метки для измерения времени. При необходимости я могу предоставить дополнительную информацию.

ответ

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)); 
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));