JPA и toplink создавать-таблица на том, если они уже не существуют?

Похож на jpa, что-то, что заставляет меня задать много вопросов.

Добавив это

<property name="toplink.ddl-generation" value="create-tables"/>

мое приложение JPA всегда составляет таблицы при выполнении, который приводит к исключениям в случае, если таблицы уже существуют. Я хотел бы, чтобы JPA проверил, существуют ли таблицы уже и если не создают их, однако я не мог бы найти значение для свойства, выше которого делает это.

Таким образом, если я просто выключаю его, существует ли способ сказать JPA вручную в какой-то момент составлять все таблицы?

Обновление здесь является исключением, которое я получаю

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tags' already exists
Error Code: 1050
Call: CREATE TABLE tags (ID BIGINT AUTO_INCREMENT NOT NULL, NAME VARCHAR(255), OCCURRENCE INTEGER, PRIMARY KEY (ID))

MySQLSyntaxErrorException?! Теперь это неправильно наверняка

6
задан Nils 20 July 2010 в 08:07
поделиться

3 ответа

Согласно http://www.oracle.com/technology/products/ias/toplink/JPA/essentials/toplink-jpa-extensions.html#Java2DBSchemaGen toplink не имеет возможности обновлять выходящие таблицы, я не уверен, что доверю ему делать правильные вещи в любом случае. Вы можете настроить toplink на генерацию sql скрипта, который вам придется выполнить вручную для создания всех таблиц. Имена файлов и расположение можно настроить следующим образом:

<property name="toplink.ddl-generation" value="create-tables"/>
<property name="toplink.ddl-generation.output-mode" value="sql-script"/>
<property name="toplink.create-ddl-jdbc-file-name" value="createDDL.sql"/>
<property name="toplink.drop-ddl-jdbc-file-name" value="dropDDL.sql"/>
<property name="toplink.application-location" value="/tmp"/>
5
ответ дан 17 December 2019 в 00:02
поделиться

Я бы хотел, чтобы [мой] JPA [провайдер] проверял, существуют ли уже таблицы, и если не создавал их, однако мне не удалось найти значение для свойства выше, которое делает это.

Странно, согласно документации TopLink Essentials о расширении toplink.ddl-generation , create-table должен оставить существующую таблицу без изменений:

TopLink JPA Extensions for Schema Generation

Укажите, какой язык дескриптора данных (DDL) действие генерации, которое вы хотите ваши объекты JPA. Чтобы указать DDL цель поколения, см. toplink.ddl-generation.output-mode .

Допустимые значения: oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

Если вы используете настойчивость вне контейнер EJB и хотел бы создавать файлы DDL без создания таблицы, дополнительно определяют Java системное свойство INTERACT_WITH_DB и установите его значение на false .

2
ответ дан 17 December 2019 в 00:02
поделиться

Ликвибаза ( http://www.liquibase.org ) хорошо справляется с этим. Чтобы полностью привыкнуть к этому, нужно время, но я думаю, что это того стоит.

Liquibase-way не зависит от того, какой поставщик сохраняемости JPA вы используете. Фактически, он даже не зависит от базы данных.

0
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: