如何以编程方式对我的Hibernate / HSQL数据库运行任意SQL语句?

时间:2011-12-30 19:08:46

标签: sql hibernate jpa jdbc

我正在寻找一种以编程方式对我的数据库执行任意SQL命令的方法。 (Hibernate,JPA,HSQL) Query.createNativeQuery()不适用于CREATE TABLE。

进行大量搜索,我想我可以使用Hibernate Session.doWork()。 通过使用已弃用的Configuration.buildSesionFactory()似乎表明doWork不起作用。 我得到"使用缺乏特权或未找到的对象"对于所有CREATE TABLE语句。

那么,执行仲裁SQL语句还有哪些其他技术? 关于使用底层JDBC语句有一些注意事项,但我还没有弄清楚如何从Hibernate获取JDBC Connection对象来尝试。

请注意,hibernate.hbm2ddl.auto = create设置对我来说不起作用,因为我有一个它所窒息的ARRAY []列。

2 个答案:

答案 0 :(得分:1)

我认为使用Hibernate本机查询执行create table语句时没有任何问题。只需确保使用Query.executeUpdate(),而不是Query.list()Query.uniqueResult()

如果它不起作用,请告诉我们执行它时会发生什么,并加入异常的完整堆栈跟踪和您正在执行的SQL查询。

答案 1 :(得分:0)

HSQL中的“使用缺少权限或未找到的对象”可能意味着任何事情,例如存在具有相同名称的表。 HSQL中的错误消息完全是误导性的。尝试使用DatabaseMetadata列出您的表 - 您可能已经创建了表。