Eclipselink更新现有表

也许我弄错了但我认为JPA能够更新现有的表(模型更改添加列)但在我的情况下不起作用。

我可以在日志中看到eclipselink尝试创建它但失败因为它已经存在。 而不是尝试更新添加列,它继续前进。

       

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

 [EL警告]:2010-05-31 14:39:06.044  -  ServerSession(16053322) - 例外[EclipseLink-4002](Eclipse Persistence Services  -  2.1.0.v20100517-r7246):org.eclipse.persistence.exceptions .DatabaseException
内部exception:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'帐户'已存在
错误代码:1050
调用:CREATE TABLE帐户(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)默认值0 NOT NULL,PRIMARY KEY(ID))
查询:DataModifyQuery(sql =“CREATE TABLE帐户(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)默认值0 NOT NULL,PRIMARY KEY(ID))“)
 [EL警告]: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

在此之后继续以下。

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

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

  

这是使用create-tables值时的预期行为。 从有关eclipselink.ddl-generation属性的文档中:

使用EclipseLink JPA Extensions进行架构生成

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

  • none – EclipseLink不生成DDL; 没有生成架构。
  • create-tables – EclipseLink将尝试为每个表执行CREATE TABLE SQL。 如果表已存在,则EclipseLink将遵循特定数据库和JDBC驱动程序组合的默认行为(当为现有表发出CREATE TABLE SQL时)。 在大多数情况下,抛出exception并且不创建表。 然后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

Hibernate JPA实现完全符合您的要求。 以下是启用该行为的属性:

 property name="hibernate.hbm2ddl.auto" value="update" 

create-or-extend-tables可以解决问题