我正在使用Play Framework 2.3.8(Java)和Ebean。
我的项目进展顺利,现在我正在寻找解决方案以从数据库中捕获高级信息。

但是,我找不到使用“ count()”语句或“ group by”语句的方法。我已经检查了ebean文档,但是没有提到这一点,所以我的问题是:这些语句是否甚至包含在ebean中?还是我需要对这种查询使用一些特殊的东西?

我在SQL中的查询如下所示:

"select thing, COUNT(thing) as count from Table group by thing";


非常感谢你的帮助。

最佳答案

在这里,您有3种方法,第一种(使用Anton回答)使用SqlQuery,第二种-不幸的是,没有访问别名字段的方法,第三种-允许您将别名字段分组并映射到Transient模型字段。

    // First approach: returns list of `raw` rows so it's mpst flexible
    List<SqlRow> rows = Ebean
            .createSqlQuery("SELECT id, count(bar) AS bar_count FROM foo WHERE 1 GROUP BY bar")
            .findList();


    // Second uses `GROUP BY`, returns entities BUT without alias fields
    List<Foo> foos = Ebean
            .createQuery(Foo.class, "WHERE 1 GROUP BY bar")
            .select("id")
            .findList();

    // or just...
    List<Foo> foos2 = Foo
            .find.where("1 GROUP BY bar")
            .findList();

    // Third, returns entities, alias fields can be mapped to model as well (requires @Transient annotation for these fields in model)
    RawSql rawSql = RawSqlBuilder
            .parse("SELECT id, count(bar) FROM foo WHERE 1 GROUP BY bar")
            .columnMapping("id", "id")
            .columnMapping("count(bar)", "bar_count")
            .create();

    com.avaje.ebean.Query<Foo> query = Ebean.find(Foo.class);
    query.setRawSql(rawSql);

    List<Foo> foosRaw = query.findList();

关于java - Ebean&Play Framework 2.3.8:缺少语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30306887/

10-11 02:44