我写了一个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();
您能告诉我如何正确调用此功能吗?我不期望任何返回值,我只想调用它 - 该函数将处理其他所有事情。
答案 0 :(得分:2)
如果你想回到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();
}
});