如何 link Ebean 子查询到主查询
How to link Ebean subquery to main query
我需要找到所有帐户上有一些钱并且很长时间没有登录的用户。
我就是这样做的:
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 中的字段 user 是一个实体 User(不是 String)。
如何在子查询中引用用户?
您可以给您的用户 table 一个 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();
我需要找到所有帐户上有一些钱并且很长时间没有登录的用户。 我就是这样做的:
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 中的字段 user 是一个实体 User(不是 String)。 如何在子查询中引用用户?
您可以给您的用户 table 一个 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();