2013-05-06 72 views
0

使用Ebean(通过Play Framework 2.1.1),我必须建立一个自制的SQL查询,但我希望它直接返回List<MyModel>,而不是List<SqlRow>,我必须为每个ID查询数据库从结果有一个List<MyModel>是否有可能将Ebean的SqlQuery结果强制转换为模型(Bean)?

是否可以直接将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. 

效率不高:■

感谢您的帮助!

+0

你需要普通的SQL,也可以使用查找方法撰写查询? (Model.find.where()。eq(...)。orderBy(...)。findList()) – TizianoPiccardi 2013-05-06 10:16:44

+0

我需要编写它。 – 2013-05-06 11:42:56

回答

3

试试这个:

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

很抱歉接受这件事,但这正是我一直在寻找的!谢谢:) – 2013-05-23 08:46:53

+0

当您使用RawSql时,Ebean存在一个特殊的问题,在此之后,您想要限制结果(限制+页面)。它失败。你知道如何解决? – 2014-02-18 14:41:52

+0

如果有人正在寻找使用* default *以外的连接的方法,您可以使用 'Query query = Ebean.getServer(“connectplus”)。find(MyModel.class)' – 2014-11-23 07:07:15

相关问题