我正在尝试运行此查询
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/