Is it possible to cast a SqlQuery results from Ebean to a Model (Bean)?

陌路散爱 提交于 2019-12-23 06:14:50

问题


Using Ebean (via Play Framework 2.1.1), I have to build a home made SQL query, but I'd like it to return directly a List<MyModel>, instead of a List<SqlRow> that I would have to query the database for each id from the result to have a List<MyModel>.

Is it possible to cast directly a SqlQuery/SqlRow to a Model ?

Actually, I do that :

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)));
}

Ideally, it would be something like :

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

This is not very efficient.


回答1:


Try this:

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();

Or using the finder:

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

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


来源:https://stackoverflow.com/questions/16395949/is-it-possible-to-cast-a-sqlquery-results-from-ebean-to-a-model-bean

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!