Eclipselink更新现有表

jav*_*csw 25 java orm jpa 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"/>
Run Code Online (Sandbox Code Playgroud)

这是改变的表格(在线栏目添加)

[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

在此之后继续以下.

我做错了什么还是个错误?

Jea*_*let 33

从EclipseLink 2.4开始,您可以在持久性单元的规范中使用它:

<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
Run Code Online (Sandbox Code Playgroud)


Pas*_*ent 6

这是使用该create-tables值时的预期行为。从关于eclipselink.ddl-generation财产的文件:

使用 EclipseLink JPA 扩展进行模式生成

以下是在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-nameeclipselink.drop-ddl-jdbc-file-name。)

所以你可能想要drop-and-create-tables