0

(Play Framework 2.1.1 経由で) Ebean を使用して、自家製の SQL クエリを作成する必要がありますが、結果から各 ID についてデータベースにクエリを実行する必要があるList<MyModel>ではなく、 を直接返すようにしたいと考えています。List<SqlRow>を持っていList<MyModel>ます。

SqlQuery/SqlRow を Model に直接キャストすることは可能ですか?

実際、私はそれをします:

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.

これはあまり効率的ではありません。

4

1 に答える 1

4

これを試して:

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();
于 2013-05-08T20:54:57.890 に答える