Выполнить запрос создания таблицы через JPA EntityManager - PullRequest
7 голосов
/ 26 мая 2011

Мне нужно создать новую таблицу в базе данных, к которой я получаю доступ через JPA EntityManager. Поддерживают ли JPA NativeQueries запросы, отличные от «Выбрать» или «Обновить»? Или есть другой современный способ выполнить сложный запрос SQL в контексте JPA?

Ответы [ 2 ]

9 голосов
/ 27 мая 2011

«Собственные запросы» jpa можно использовать только для операторов DML (Язык манипулирования данными). Для выдачи любого DDL, например таблицы создания, вам необходимо получить базовое соединение из EntityManager.

Способ извлечения соединения из EM будет зависеть от того, какую реализацию JPA вы используете, но обязательно включит вызов EntityManager.getDelegate ().

В качестве альтернативы (и я думаю, что это лучший подход), введите DataSource или JDBCTemplate, если вы используете spring для объекта, который пытается создать таблицу, и используйте этот класс для создания таблицы.

0 голосов
/ 11 июля 2017

JPA (по крайней мере, Hibernate) может позволить вам выполнять операторы DDL напрямую, используя createNativeQuery () и executeUpdate () следующим образом:

EntityManager em = ...;
em.createNativeQuery("CREATE TABLE FOO (FOO_ID NUMBER)").executeUpdate();
em.createNativeQuery("DROP TABLE FOO").executeUpdate();

Это не идеально, но вы можете сделать это.

...