如何将Ebean子查询链接到主查询

时间:2017-10-18 15:11:20

标签: playframework 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中的字段用户是实体User(不是String)。 如何在子查询中引用用户?

1 个答案:

答案 0 :(得分: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();