Как вы установить имя схемы для последовательностей во время развертывания при использовании JPA?

По соображениям безопасности, наши объекты базы данных oracle обычно принадлежат другой схеме, чем зарегистрированный пользователь. Например. таблицы находятся в xx_core, а пользователь, в который мы вошли, - xx_app_yy. В моем persistence.xml я определяю файл orm, чтобы я мог указать имя схемы во время развертывания, например: xx_schema_orm.xml

Затем в xx_schema_orm.xml я могу определить схему-владельца объекта, например :

<persistence-unit-metadata>
  <persistence-unit-defaults>
    <schema>xx_core</schema>
  </persistence-unit-defaults>
</persistence-unit-metadata>

Это отлично работает для таблиц, но я могу Не могу найти эквивалента для последовательностей. Он пытается использовать последовательность без имени схемы, а затем я получаю исключение:

2010-10-14 03:04:05,423:DEBUG   could not get next sequence value [select xx_SEQ.nextval from dual]     - org.hibernate.util.JDBCExceptionReporter
java.sql.SQLException: ORA-02289: sequence does not exist

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)

Я попытался установить имя схемы как часть имени последовательности для генератора в xx_schema_orm.xml, но не смог заставить его работать Например:

<sequence-generator name="xx_SEQ_GEN"
sequence-name="xx_core.xx_SEQ"/>

Обходные пути Я могу попробовать:

  • создать базу данных SYNONYM для последовательностей в схеме пользователя.
  • прекратить использование последовательностей и использовать другой способ генерации идентификаторов.
5
задан AmanicA 15 October 2010 в 21:01
поделиться