Eclipselink обновляют существующие таблицы

Возможно, я понял его превратно, но я, хотя это JPA смогло обновить существующую таблицу (модель изменила добавление столбца), но не работаю в своем случае.

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

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jwrestling"/>
<property name="javax.persistence.jdbc.password" value="password"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/>
<property name="eclipselink.logging.level" value="INFO"/>

И вот таблица с изменением (добавленный столбец онлайн)

[EL Warning]: 2010-05-31 14:39:06.044--ServerSession(16053322)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100517-r7246): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'account' already exists
Error Code: 1050
Call: CREATE TABLE account (ID INTEGER NOT NULL, USERNAME VARCHAR(32) NOT NULL, SECURITY_KEY VARCHAR(255) NOT NULL, EMAIL VARCHAR(64) NOT NULL, STATUS VARCHAR(8) NOT NULL, TIMEDATE DATETIME NOT NULL, PASSWORD VARCHAR(255) NOT NULL, ONLINE TINYINT(1) default 0 NOT NULL, PRIMARY KEY (ID))
Query: DataModifyQuery(sql="CREATE TABLE account (ID INTEGER NOT NULL, USERNAME VARCHAR(32) NOT NULL, SECURITY_KEY VARCHAR(255) NOT NULL, EMAIL VARCHAR(64) NOT NULL, STATUS VARCHAR(8) NOT NULL, TIMEDATE DATETIME NOT NULL, PASSWORD VARCHAR(255) NOT NULL, ONLINE TINYINT(1) default 0 NOT NULL, PRIMARY KEY (ID))")
[EL Warning]: 2010-05-31 14:39:06.074--ServerSession(16053322)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100517-r7246): org.eclipse.persistence.exceptions.DatabaseException

После этого это продолжает следующее.

Я делаю что-то не так или являюсь ошибкой?

25
задан Pascal Thivent 31 May 2010 в 22:18
поделиться

1 ответ

Это ожидаемое поведение при использовании значения create-tables. Из документации о свойстве eclipselink.ddl-generation:

Using EclipseLink JPA Extensions for Schema Generation

Ниже приведены допустимые значения для использования в файле persistence.xml:

  • none - EclipseLink не генерирует DDL; схема не генерируется.
  • create-tables - EclipseLink попытается выполнить CREATE TABLE SQL для каждой таблицы. Если таблица уже существует, EclipseLink будет следовать поведению по умолчанию вашей конкретной базы данных и драйвера JDBC (когда CREATE TABLE SQL выдается для уже существующей таблицы). В большинстве случаев возникает исключение и таблица не создается. Затем EclipseLink продолжит выполнение следующий оператор. (См. также eclipselink.create-ddl-jdbc-file-name.)
  • drop-and-create-tables - EclipseLink попытается DROP все таблицы, затем CREATE все таблицы. таблицы, а затем СОЗДАТЬ все таблицы. Если возникнут какие-либо проблемы, EclipseLink будет следовать стандартному поведение вашей конкретной базы данных и JDBC драйвера, затем продолжите со следующим утверждением. (См. также eclipselink.create-ddl-jdbc-file-name и eclipselink.drop-ddl-jdbc-file-name.)

Поэтому вместо drop-and-create-tables вам может понадобиться .

4
ответ дан 28 November 2019 в 21:15
поделиться
Другие вопросы по тегам:

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