2017-10-18 14 views
1

계정에 돈이 있고 오랫동안 로그인하지 않은 모든 사용자를 찾아야합니다. 그게 내가 할 수있는 작업은 다음과 같습니다Ebean 하위 쿼리를 기본 쿼리에 연결하는 방법

Query<UserSessionRecord> subQuery = 
         Ebean.createQuery(UserSessionRecord.class) 
           .where().gt("loginDateTime", DateTime.now().minusMonths(1)) 
           .eq("user", "user") // <-- here I need to refer somehow to the main query 
           .query(); 
//my main query 
List<User> users = User.FIND.where().eq("account.balance", 0) 
         .notExists(subQuery) 
         .orderBy("id").findList(); 

UserSessionRecord에서 필드 사용자가 기업 사용자 (안 문자열)이기 때문에이 코드는 작동하지 않습니다. 하위 쿼리에서 사용자를 어떻게 참조 할 수 있습니까?

답변

0

사용자 테이블에 SQL 별칭을 지정할 수 있습니다. 그런 다음 raw() - 메소드를 사용하여 동등성을 확인할 수 있습니다.

Query<UserSessionRecord> subQuery = 
        Ebean.createQuery(UserSessionRecord.class) 
          .where().gt("loginDateTime", DateTime.now().minusMonths(1)) 
          .raw(mainuser.id=user.id) 
          .query(); 

List<User> users = User.FIND.query().alias("mainuser").where().eq("account.balance", 0) 
        .notExists(subQuery) 
        .orderBy("id").findList();