【发布时间】:2015-01-02 16:14:56
【问题描述】:
我正在使用JPA2、EclipseLink。我正在尝试向现有数据库和表添加一个新列。我在 POJO 类 MyTable 中添加了一个新字段。尽管有create-or-extend-tables 属性,但新列没有被添加。
这是我的persistence.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="idpersistance">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.id.service.db.pojo.AppTable</class>
<class>com.id.service.db.pojo.MyTable</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"></property>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:2705/mydb"></property>
<property name="javax.persistence.jdbc.user" value="user"></property>
<property name="javax.persistence.jdbc.password" value="password"></property>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
<property name="eclipselink.id-validation" value="NULL"></property>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="javax.persistence.lock.timeout" value="1000"/>
<property name="eclipselink.target-database" value="MySQL"/>
</properties>
</persistence-unit>
</persistence>
我不确定为什么没有添加新列。我回来了以下错误:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: null, message from server: "Unknown column 'newcol' in 'field list'"
Error Code: 1054
我正在使用的jar 文件:
eclipselink.jar (2.5.2)
javax.persistence_2.1.0.v201304241213.jar
如果我的persistence.xml 文件中缺少任何内容,请告诉我。
感谢任何帮助。
更新:
我已经调试到EclipseLink 代码,发现它没有尝试生成新列,它在EntityManagerFactoryProvider 类中的extendDefaultTables() 方法处引发错误,并说表已经存在并从该方法返回。
如果我手动将此字段设置为true,则DatasourceAccessor 类的incrementCallCount() 方法中有一个名为useExternalConnectionPooling 的字段。然后新列正在成功生成。由于该字段为 false,EclipseLink 未触发扩展。我不确定,这是否是正确的字段。
【问题讨论】:
-
这对我不起作用。我仍然看到同样的问题。
-
创建表的 SQL 显示了什么?
-
@Chris,我没有明白你的意思。表已经创建,现在我正在尝试添加新列。
-
您解决了这个问题吗?我对 eclipselink 2.7.0 也有同样的问题。
标签: java mysql eclipselink jpa-2.0