2015-05-19 71 views
2

有样品的方法:Ebean:如何在RawSqlBuilder中使用通配符作为字段名称?

private static List<Foo> getFoos() { 
    Query<Foo> query = Ebean.find(Foo.class); 
    query.setRawSql(
      RawSqlBuilder 
        .parse("SELECT * FROM foo") 
        .create() 
    ); 

    return query.findList(); 
} 

不幸的是它抛出一个异常:

[的PersistenceException:房产[*]不models.Foo发现]

当然它精品工程如果我在SQL中指定字段,如:

.parse("SELECT foo, bar, baz FROM foo") 

无论如何,我宁愿不手动,因为后来Ebean执行额外的查询来获取不在列表中的属性,在这种情况下,我怎样才能使用*通配符模型的字段名?

回答

1

你可以尝试使用unparsed代替

RawSqlBuilder 
    .unparsed("SELECT * FROM SomeTable") 
    .columnMapping("id", "id") 
    .create(); 

请注意,您必须至少指定一个列映射,或者Ebean将与一些抱怨这样

Query threw SQLException: Column Index out of range, 0 < 1 
+0

几乎...不幸的是它如果给定的列未被'columnMapping(“foo”,“foo”)映射,那么最终不能解决问题。Ebean执行自动获取......这对于大型数据集是真正的性能杀手。 – biesior

相关问题