我在PostgreSQL中有这个选择:
SELECT "field_1", "field_2","field_3", MIN(COALESCE(NULLIF("field_4",'') ,'TBD')) MINDP,MIN("field_5") MINBOD FROM "MY_TABLE" GROUP BY "field_1", "field_2","field_3"
我想使用net.java.ao.Query来查询我的数据库。我的功能:
import net.java.ao.Query;
public List<myClass> find() {
String SQL = "SELECT \"field_1\", \"field_2\",\"field_3\", MIN(COALESCE(NULLIF(\"field_4\",'') ,'TBD')) MINDP,MIN(\"field_5\") MINBOD FROM \"MY_TABLE\" GROUP BY \"field_1\", \"field_2\",\"field_3\""
return newArrayList(ao.find(myClass.class, Query.select(SQL)));
}
问题是:此代码返回我表中的所有问题。
当我在postgreSQL控制台中运行此SQL时,它可以正常工作。
我的代码与SQL控制台的结果不同。
有人知道为什么会这样吗?
答案 0 :(得分:0)
Query.select()
并不意味着将普通SQL
放入其中。创建“数据库无关”查询更像是一个构建器。在此处查看一些示例:Finding entities
public MyEntity[] findMyEntities(String fieldValue) {
final Query query = Query.select()
.where("FIELD_VALUE = ?", fieldValue);
// evaluates to something like this
// SELECT * FROM MY_ENTITY WHERE FIELD_VALUE = x;
return ao.find(MyEntity.class, query);
}
这就是为什么有另一种方法(您在注释中使用)可以处理普通SQL(findWithSQL
)的原因。
注意Query
和find()
通常无法按预期工作,因此您可能无法使用查询生成器来使原始查询正常工作。