我有一个自定义函数,我在查询中使用不同参数执行多次:
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]
我已经仔细检查过我正在针对相同的数据库和架构运行。
任何想法?
答案 0 :(得分:1)
作为超级用户(默认为postgres
)运行:
set log_statement='all';
然后运行你的hibernate SQLQuery。您将在Postgres日志文件中看到发出给数据库的命令是什么。也许这会对你有帮助。
测试后不要忘记set log_statement='none';
,因为记录所有语句都会很慢。
除此之外,你的功能可能有问题 - 如果没有它的定义,我们就无法帮助。