如何 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();