2016-05-23 36 views
0

所以,我有一個名爲app的類。應用程序與名爲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)); 

我使用時間戳來衡量時間。如果需要,我可以提供更多信息。

回答

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