2014-11-07 3 views
1

Как я могу вызвать инструкцию CREATE MATERIALIZED VIEW из моей среды JPA? В настоящее время инструкция находится в файле, загруженном из контекста приложения. Я просто хочу его выполнить.Как вызвать инструкцию CREATE MATERIALIZED VIEW из среды Java JPA?

Могу ли я использовать EntityManager для выполнения SQL-скрипта или мне нужно создать инструкцию?

Session session = (Session) em.getDelegate(); 
SessionFactoryImplementor sfi = (SessionFactoryImplementor) session.getSessionFactory(); 
ConnectionProvider cp = sfi.getConnectionProvider(); 
Connection connection = cp.getConnection(); 
Statement statement = connection.createStatement(); 
statement.execute(sql); 

Я пробовал это, но только что получил «недостающий идентификатор \ n». Возможно, это потому, что мое заявление начинается с новой строки, но это не должно быть проблемой. Сам сценарий в порядке и работает, например, при использовании SQL * Plus.

Кроме того, я попытался его с

em.createNativeQuery(sql); 

но получил "javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: не мог извлечь ResultSet".

Любые мысли или примеры?

ad: Я использую Oracle 12c в задней части.

ответ

2

Хорошо, после нескольких часов зацепления глубже я нашел свои проблемы.

Прежде всего, мой SQL скрипт, содержащий Unescaped "(двойные кавычки). Решение было избежать этих символов.

Тем не менее, самая сложная вещь в том, что все мои SQL файлы были, содержащие признаки \ uFEFF. Известный как BOM (отметка порядка байтов). Похоже, мой драйвер Oracle не в состоянии правильно обрабатывать спецификации. Это вызвало \ п исключение, как упоминалось выше.

Наконец, я могу назвать

Query query = em.createNativeQuery(sql); 
query.executeUpdate(); 

для создания моей материи . Извлеченные уроки: обратите внимание на непризнанные знаки в файлах sql.

 Смежные вопросы

  • Нет связанных вопросов^_^