java - 如何使用 Hibernate/JDBC 删除函数?

标签 java sql hibernate jdbc h2

我正在尝试运行此查询

drop FUNCTION IF EXISTS time_factor;

我想使用 createSQLQuery()doWork() 通过 Hibernate session 运行它。 像这样:

sessionFactory.getCurrentSession().createSQLQuery(query).executeUpdate();

sessionFactory.getCurrentSession().doWork(new Work() {
        @Override
        public void execute(Connection connection) throws SQLException {
            connection.prepareStatement(query).executeUpdate();
        }
});

这就是我得到的:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "DROP FUNCTION[*] IF EXISTS TIME_FACTOR; "; expected "TABLE, INDEX, USER, SEQUENCE, CONSTANT, TRIGGER, VIEW, ROLE, ALIAS, SCHEMA, ALL, DOMAIN, TYPE, DATATYPE, AGGREGATE";

这是否意味着我无法通过 JDBC/Hibernate 删除函数?

此外,如果有人知道我可以运行它的方法,我将非常感激。

最佳答案

不是 JDBC/Hibernate 不支持 DROP FUNCTION,而是 H2 数据库。

您可以在此处查看支持的 SQL 语法: http://h2database.com/html/grammar.html

如果您希望使用 H2 创建和删除函数,请查找 ALIAS。 您可以使用 CREATE ALIAS 创建 Java 函数别名,并使用 DROP ALIAS 删除它们:

CREATE ALIAS MY_SQRT FOR "java.lang.Math.sqrt";

DROP ALIAS IF EXISTS MY_SQRT;

关于java - 如何使用 Hibernate/JDBC 删除函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450184/

相关文章:

java - java se环境下应用程序如何 Weld 容器服务?

java - JScrollPane 不滚动

Java小程序无法通过浏览器访问mysql

java - 如果实体已经存在,如何通过属性返回实体?

java - Hibernate 基本示例不起作用

java - 如何通过 CXF 中的拦截器将 SoapFault 转换为 SoapMessage?

mysql - 将字符串与之前有空格的字符串进行比较,而另一个则没有

mysql - 在mysql上将多行合并为一行多列

sql - 遇到错误时如何停止执行sql脚本

hibernate - 处理 JPA 中的空或空集合参数