通过Hibernate调用Postgres函数

时间:2013-06-02 14:25:22

标签: hibernate postgresql postgis postgresql-9.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();

您能告诉我如何正确调用此功能吗?我不期望任何返回值,我只想调用它 - 该函数将处理其他所有事情。

1 个答案:

答案 0 :(得分:2)

如果你想回到JDBC,这里是how to handle stored proceduresget Connection from Hibernate session

session.doWork(new Work() {
    @Override
    public void execute(Connection connection) throws SQLException {
        connection.prepareCall("{call queryinteriorexteriorcount()}").executeQuery();
    }
});