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-name
和eclipselink.drop-ddl-jdbc-file-name
。)
所以你可能想要drop-and-create-tables
。
Hibernate JPA实现完全符合您的要求。 以下是启用该行为的属性:
property name="hibernate.hbm2ddl.auto" value="update"
create-or-extend-tables可以解决问题