0

次のように、クエリで異なるパラメーターを使用して複数回実行するカスタム関数があります。

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 の外で実行すると、これは問題なく実行され、2 つの異なる値が返されます。

1, 2

ただし、休止状態の SQLQuery を介してまったく同じパラメーターでまったく同じクエリを呼び出すと、最初の結果が 2 回得られます。

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]

同じデータベースとスキーマに対して実行していることを再確認しました。

何か案は?

4

1 に答える 1

1

スーパーユーザーとして(postgresデフォルトで)これを実行します:

set log_statement='all';

次に、休止状態の SQLQuery を実行します。Postgres ログ ファイルに、データベースに対して発行されたコマンドが表示されます。多分これはあなたを助けるでしょう。

set log_statement='none';すべてのステートメントをログに記録すると時間がかかるため、テスト後に戻ることを忘れないでください。

これとは別に、関数に何か問題がある可能性があります — 定義なしではどうすることもできません。

于 2012-07-06T07:28:14.353 に答える