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 获取连接

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