【问题标题】:Is it possible to cast a SqlQuery results from Ebean to a Model (Bean)?是否可以将 SqlQuery 结果从 Ebean 转换为模型(Bean)?
【发布时间】:2013-05-06 09:40:25
【问题描述】:

使用 Ebean(通过 Play Framework 2.1.1),我必须构建一个自制的 SQL 查询,但我希望它直接返回 List<MyModel>,而不是我必须查询的 List<SqlRow>结果中每个 id 的数据库都有一个List<MyModel>

是否可以将 SqlQuery/SqlRow 直接转换为模型?

其实我就是这么做的:

SqlQuery query = Ebean.createSqlQuery("SELECT id FROM MyModel WHERE ...");
List<SqlRow> rows = query.findList(); // not directly possible.
List<MyModel> results = new ArrayList<MyModel>();
for (SqlRow row : rows) {
    results.add(MyModel.find.idEq(row.getLong("id)));
}

理想情况下,应该是这样的:

SqlQuery query = Ebean.createSqlQuery("SELECT id FROM MyModel WHERE ...");
List<MyModel> results = (List<MyModel>) query.findList(); // not directly possible.

这不是很有效。

【问题讨论】:

  • 您需要纯 SQL 还是可以使用查找器方法编写查询? ( Model.find.where().eq(...).orderBy(...).findList() )
  • 我需要作曲。

标签: sql playframework-2.1 ebean


【解决方案1】:

试试这个:

RawSql rawSql = RawSqlBuilder.parse("SELECT id, value, ... FROM MyModel WHERE ...")
                  .columnMapping("id", "id")
                  .columnMapping("value", "value")
                  //...
                  .create();

Query<MyModel> query = Ebean.find(MyModel.class);
query.setRawSql(rawSql);
List<MyModel> result = query.findList();

或者使用取景器:

Finder<Long, MyModel> finder = new Finder<Long, MyModel>(Long.class, MyModel.class);

List<MyModel> result = finder.where()
                             .eq("name", "Barack Obama")
                             //...
                             .findList();

【讨论】:

  • 很抱歉这么晚才接受它,但这正是我想要的!谢谢:)
  • 当你使用 RawSql 时,Ebean 有一个特殊的问题,然后你想限制结果(限制 + 页)。它失败。你知道如何解决吗?
  • 如果有人正在寻找使用 default 以外的连接方式,您可以使用Query&lt;MyModel&gt; query = Ebean.getServer("connectplus").find(MyModel.class)
  • 在我的最后一条评论中,connectplus=yourConnectionName
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 2019-10-13
相关资源
最近更新 更多