如何使用net.java.ao.Query查询问题?

时间:2015-09-23 11:50:39

标签: java postgresql

我在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控制台的结果不同。

有人知道为什么会这样吗?

1 个答案:

答案 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)的原因。

注意Queryfind()通常无法按预期工作,因此您可能无法使用查询生成器来使原始查询正常工作。