hibernate - 通过 Hibernate 调用 Postgres 函数

标签 hibernate postgresql postgis postgresql-9.2

我编写了一个返回类型为 void 的 PostgreSQL 函数:

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();

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

最佳答案

如果您想回退到 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();
    }
});

关于hibernate - 通过 Hibernate 调用 Postgres 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16883669/

相关文章:

java - Hibernate 找不到刚刚创建的表的类映射

java - Hibernate默认时间戳是从数据库还是虚拟机获取的?

node.js - 如何在 Sequelize 中忽略 SequelizeUniqueConstraintError?

postgis - 将 ExecuteSQL 处理器的结果与 nifi 6.0 中的 Json 内容合并

java - JPA 2 - INNER JOIN 再次调用 Query

java - 字符串数据,右截断 - Hibernate with Spring Boot

带有 pg/postgres 的 node.js 纤维

postgresql - 在 postgresql 中使用 to_tsvector 和 to_tsquery 处理拼写错误

drupal - Drupal 可以与 PostGIS 一起使用以进行空间查询吗?

sql - 如何使用 ST_DWithin 查找近点?