当前位置: 首页 > 知识库问答 >
问题:

JPA2:create-or-extend-tables没有使用新列扩展现有表

孙永思
2023-03-14

我使用的是JPA2Eclipselink。我正在尝试向现有的数据库和表添加一个新列。我在POJO类MyTable中添加了一个新字段。尽管具有create-or-extend-tables属性,但新列没有被添加。

<?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
 eclipselink.jar (2.5.2)
 javax.persistence_2.1.0.v201304241213.jar

更新:我已经调试到Eclipselink代码中,发现它没有试图生成新列,它在EntityManagerFactoryProvider类中的ExtendDefaultTables()方法处抛出一个错误,并表示表已经存在并从该方法返回。

如果我手动将DataSourceAccessor类的IncrementCallCount()方法中有一个名为UseExternalConnectionPooling的字段。然后成功生成新列。因为字段是false,所以Eclipselink没有触发extend。我不确定,如果这是正确的领域去。

共有1个答案

景翰音
2023-03-14
Map<String, Object> x = new HashMap<>();
...
x.put("eclipselink.logging.level.sql", "FINE");
...
Persistence.createEntityManagerFactory("MyPersistenceUnit", x);
[EL Fine]: sql: 2015-11-11 16:24:14.042--ServerSession(667237426)--Connection(1844518545)--ALTER TABLE bm_picinfo ADD account BIGINT NOT NULL 
[EL Fine]: sql: 2015-11-11 16:24:14.066--ServerSession(667237426)--SELECT 1
[EL Warning]: 2015-11-11 16:24:14.092--ServerSession(667237426)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "account" contains null values

在上面的示例中,新字段被定义为

   @ManyToOne(targetEntity = BmAccountE.class)
   @JoinColumn(name = "account", nullable = false, insertable = false, updatable = false)
   public BmAccountE account;

在本例中,删除nullable=false是解决方案。

 类似资料:
  • 我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d

  • 本文向大家介绍Jquery中扩展方法extend使用技巧,包括了Jquery中扩展方法extend使用技巧的使用技巧和注意事项,需要的朋友参考一下 在使用Jquery开发的过程中,extend是常用的参数处理函数,特别是对默认值的使用。 Jquery的扩展方法原型是: 作用是把src1,src2,src3合并到到dest中并返回合并后的dest. 但是在使用过程中,默认值往往是不能被改变的, 如下

  • 问题内容: 我在Excel中有一张要添加数据的公式表。 我这样做的动机是,Excel中的表可以动态扩展到您添加到表中的数据范围,这意味着公式行会自动跟上数据行的数量。 但是,我很难确定是否可以使用apache-POI。 我要尝试的一件事(请参见下面的代码)是扩展表的范围以覆盖数据,但是;(在 本示例中使用的)和(在apache 文档中看到的)都给出“构造函数未定义”。 不知道是什么原因导致了导入的

  • 我有一个打字错误310.4。1在Ubuntu20.04上安装(composer模式),使用PHP7.4和mariadb数据库,并安装扩展名“extension Builder”(v10兼容性)。当我使用扩展生成器使用域模型创建一个新的扩展并保存它时,将其添加到编写器时,也不会出现错误。json并运行composerrequire命令。但是,数据库中没有创建表。 有人知道从哪里开始寻找问题吗? 提前

  • 本文向大家介绍扩展KMP算法(Extend KMP),包括了扩展KMP算法(Extend KMP)的使用技巧和注意事项,需要的朋友参考一下 扩展kmp既是求模式串和主串的每一个后缀的最长公共前缀 即令s[i]表示主串中以第i个位置为起始的后缀,则B[i]表示s[i]和模式串的最长公共前缀 显然KMP是求s[i]=模式串长度的情况,所以,扩展KMP是对KMP的拓展 像求KMP的next数组一样,我们

  • 我正在开发一种新的Markoff风格,它引入了一些新的语法元素。我已经手动修改了与VSCode捆绑在一起的文件,以便为它们实现一些语法突出显示。我现在想创建一个VSCode扩展,为Markoff的语法突出显示提供新的补充。 但是,我真的不认为复制粘贴原始的 Markdown 语法突出显示逻辑只是为了在顶部添加一些东西是一个好主意——有没有办法创建一个 语法突出显示文件,该文件继承(因为缺乏更好的词