我正在使用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/