2

戻り値の型が の PostgreSQL 関数を作成しましたvoid

CREATE OR REPLACE FUNCTION queryinteriorexteriorcount()
  RETURNS void AS .....

pgAdminから呼び出すと、関数は期待どおりに機能します。ただし、Hibernate から呼び出すと動作しないようです。代わりに、次の例外がスローされ続けます。

failed.org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

カスタム方言を作成しようとして、関数を次のように登録しました。

public class PostgisDialect extends PostgisDialect {

    private static final long serialVersionUID = 3397563913838305367L;

    public PostgresDialect(){
        registerFunction("queryinteriorexteriorcount", new StandardSQLFunction("queryinteriorexteriorcount"));
    }
}

次に、hibernate.cfg.xml の方言を変更しました。

<property name="dialect">at.opendata.hibernate.PostgresDialect</property>

そして、次の方法で関数を(再び)呼び出そうとしました:

Query query = session.createSQLQuery("SELECT queryinteriorexteriorcount()");
query.uniqueResult();

この関数を適切に呼び出す方法を教えてください。私は戻り値を期待していません。それを呼び出したいだけです。関数が他のすべてを処理します。

4

1 に答える 1

2

JDBC にフォールバックする場合は、ストアド プロシージャを処理し、Hibernate セッションから接続を取得する方法を次に示します。

session.doWork(new Work() {
    @Override
    public void execute(Connection connection) throws SQLException {
        connection.prepareCall("{call queryinteriorexteriorcount()}").executeQuery();
    }
});
于 2013-06-02T14:51:49.683 に答える