SQLQuery使用不同的参数调用自定义函数两次仅第一次执行

时间:2012-07-06 07:05:22

标签: hibernate postgresql

我有一个自定义函数,我在查询中使用不同参数执行多次:

select
    my_function(input.pt, false),
    my_function(input.pt, true)
from (select st_geomfromewkt('SRID=1;POINT(151.2836 -33.7859484007395)') as pt) as input;

当在java / hibernate之外运行时,这会执行很好的返回两个不同的值:

1, 2

但是,当我通过hibernate SQLQuery使用完全相同的参数调用完全相同的查询时,我得到第一个结果两次:

SQLQuery qry = session.createSQLQuery("SELECT "//
    + " my_function(input.pt, false)," //
    + " my_function(input.pt, true)" //
    + " FROM (SELECT st_geomfromewkt(:point) AS pt) AS input;");
qry.setString("point", "SRID=1;POINT(151.2836 -33.7859484007395)");
Object[] result = (Object[]) qry.uniqueResult();

结果:

[1, 1]

我已经仔细检查过我正在针对相同的数据库和架构运行。

任何想法?

1 个答案:

答案 0 :(得分:1)

作为超级用户(默认为postgres)运行:

set log_statement='all';

然后运行你的hibernate SQLQuery。您将在Postgres日志文件中看到发出给数据库的命令是什么。也许这会对你有帮助。

测试后不要忘记set log_statement='none';,因为记录所有语句都会很慢。

除此之外,你的功能可能有问题 - 如果没有它的定义,我们就无法帮助。