Как программно выполнить произвольные операторы SQL для моей базы данных Hibernate / HSQL? - PullRequest
1 голос
/ 30 декабря 2011

Я ищу способ программно выполнять произвольные команды SQL для моей БД. (Hibernate, JPA, HSQL) Query.createNativeQuery () не работает для таких вещей, как CREATE TABLE.

Делая МНОГО поиска, я подумал, что могу использовать Hibernate Session.doWork (). Использование устаревшей Configuration.buildSesionFactory (), кажется, показывает, что doWork не будет работать. Я получаю «использовать отсутствие привилегий или объект не найден» для всех операторов CREATE TABLE.

Итак, какой другой метод существует для выполнения произвольных операторов SQL? Было несколько замечаний по использованию базового оператора JDBC, но я не выяснил, как получить объект JDBC Connection из Hibernate, чтобы попробовать это.

Обратите внимание, что настройка hibernate.hbm2ddl.auto = create НЕ будет работать для меня, так как у меня есть столбцы ARRAY [], которые он задыхается.

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Я не думаю, что есть какие-либо проблемы с выполнением оператора создания таблицы с помощью собственного запроса Hibernate.Просто убедитесь, что вы используете Query.executeUpdate(), а не Query.list() или Query.uniqueResult().

Если это не сработает, пожалуйста, сообщите нам, что произойдет, когда вы его выполните, и присоединитесь к полной трассировке стекаисключение и выполняемый SQL-запрос.

0 голосов
/ 30 декабря 2011

«использовать отсутствие привилегии или объект не найден» в HSQL может означать что угодно, например, существование таблицы с тем же именем.Сообщения об ошибках в HSQL полностью вводят в заблуждение.Попробуйте составить список ваших таблиц, используя DatabaseMetadata - вы, вероятно, уже создали таблицу.

...