OpenJPA 1 - таблица последовательности не создается - PullRequest
2 голосов
/ 26 марта 2012

У меня есть класс сущности со следующей аннотацией в первичном ключе: @GeneratedValue(strategy = GenerationType.AUTO). Однако, когда я пытаюсь persist экземпляр этого класса, я получаю

com.microsoft.sqlserver.jdbc.SQLServerException: недопустимое имя объекта «OPENJPA_SEQUENCE_TABLE». в com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (SQLServerException.java:197)

Таблица, которую она ищет, определенно не существует в базе данных. Пользователь подключается к базе данных, так как может создавать таблицы. Должно ли оно автоматически создавать OPENJPA_SEQUENCE_TABLE или я должен сделать это для него? Если да, то какую схему таблицы он ожидает? Я использую openjpa-1.2.2.jar.

Редактировать: Я посмотрел на main() JavaDoc , поскольку у него есть возможность добавить таблицу последовательности в командной строке, но org.apache.openjpa.jdbc.schema.TableJDBCSequence не существует в openjpa -1.2.2.jar. org.apache.openjpa.jdbc.schema делает, но TableJDBCSequence не в нем.

Ответы [ 2 ]

5 голосов
/ 19 сентября 2012

По умолчанию OpenJPA не создает ни одну из таблиц (включая таблицу последовательности) автоматически, если в вашем файле persistence.xml не включено свойство SynchronizeMappings.Тем не менее, это действительно хорошо только для целей отладки, так как я думаю, что он сбрасывает базу данных каждый раз при запуске приложения:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

Вы также можете использовать OpenJPA MappingTool из командной строки для генерации скрипта схемы:

java org.apache.openjpa.jdbc.meta.MappingTool -action buildSchema -foreignKeys true

Более подробная информация об инструменте картирования и прямом отображении во время выполнения доступна здесь: http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_mapping.html#ref_guide_ddl_examples

Последний вариант - просто создать таблицу вручную.Вот скрипт для Oracle;Вы, вероятно, можете конвертировать его в SQL Server довольно легко:

CREATE TABLE openjpa_sequence_table (ID tinyint(4) NOT NULL, SEQUENCE_VALUE bigint(20) default NULL, PRIMARY KEY (ID)) 
0 голосов
/ 02 апреля 2014

В моем случае изменение GenerationType.AUTO на GenerationType.IDENTITY решило проблему.Конечно, это только решение, если вы можете изменить сущность.

...