我编写了一个返回类型为 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 procedures和 get 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/