2012-07-06 44 views
0

我有我在查詢執行多次使用不同的參數,像這樣的自定義函數:的SQLQuery調用自定義函數只執行一次

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; 

在爪哇以外運行/休眠此只執行罰款返回兩個不同的值:

1, 2 

然而,當我通過一個休眠的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

tometzky我會嘗試你的建議(日誌)很快,但只是一個側面說明,我測試過,如果我切換函數調用周圍(即真實的,那麼假的),我總是得到第一調用的結果時兩次通過休眠(2,2)。 – pstanton 2012-07-06 20:02:44

回答

1

作爲超級用戶(postgres默認情況下)運行以下命令:

set log_statement='all'; 

然後運行你的Hibernate的SQLQuery。您將在Postgres日誌文件中看到發給數據庫的命令是什麼。也許這會幫助你。

不要忘記set log_statement='none';在測試之後回來記錄所有語句會很慢。

除此之外,您的功能可能會出現問題 - 如果沒有定義,我們將無能爲力。