【问题标题】:Ebean & Play Framework 2.3.8 : Missing statementsEbean 和 Play 框架 2.3.8:缺少语句
【发布时间】:2015-05-18 15:13:49
【问题描述】:

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

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

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

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

非常感谢您的帮助。

【问题讨论】:

  • 我已经尝试过 "return find.select("thing, count(thing)").where().findList(); 对于 count() 部分,并得到一个 "not found for模型”错误。我不知道 group by 语句。

标签: java playframework ebean playframework-2.3


【解决方案1】:

在这里您有 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();

【讨论】:

    【解决方案2】:

    您可以使用http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/SqlQuery.html

     String sql = "select thing, COUNT(thing) as count from Table group by :thing";
    
     SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
     sqlQuery.setParameter("thing", "FOO");
    
     // execute the query returning a List of MapBean objects
     List<SqlRow> list = sqlQuery.findList();
    

    然后你可以在 JDBC-fashion 中使用SqlRows - 获取整数、字符串等等......

    【讨论】:

    • 是的,这就是我害怕的,没有直接在 ebean 中定义的 group by 语句。但是,没关系,它有效。感谢您的帮助;)
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多