代码之家  ›  专栏  ›  技术社区  ›  javydreamercsw

Eclipselink更新现有表

  •  25
  • javydreamercsw  · 技术社区  · 14 年前

    也许我弄错了,但我认为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
    

    4 回复  |  直到 14 年前
        1
  •  36
  •   Jean-Philippe Pellet    12 年前

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

    <property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
    
        2
  •  6
  •   Pascal Thivent    14 年前

    这是使用 create-tables 价值观。从关于 eclipselink.ddl-generation 属性:

    Using EclipseLink JPA Extensions for Schema Generation

    以下是的有效值 persistence.xml 文件:

    所以你可能想要 删除和创建表 相反。

        3
  •  2
  •   Chris Seymour    11 年前

    Hibernate JPA实现正是您想要的。以下是支持该行为的属性:

    property name="hibernate.hbm2ddl.auto" value="update"
    
        4
  •  0
  •   Hamdi Baligh    12 年前