【问题标题】:error while trying to add new value for JPA table尝试为 JPA 表添加新值时出错
【发布时间】:2013-01-06 21:52:09
【问题描述】:

我使用 JPa API 并且它运行良好,我尝试将新成员/列添加到类(表)中,当我尝试为其添加数据时,它运行良好,但在提交部分我得到了以下内容的转储错误

线程“主”javax.persistence.RollbackException 中的异常:异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345):org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLSyntaxErrorException:'DOUBLE1' 不是表或 VTI 'TEST.PERSON' 中的列。 错误代码:20000 呼叫:插入人(ID、DOUBLE1、FIRSTNAME、LASTNAME、NONSENSEFIELD)值(?、?、?、?、?) bind => [绑定5个参数]

但是在表格中我添加了成员​​ double1 如下

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private String id;
    private String firstName;
    private String lastName;
    private double double1;

....

    public double getDouble1() {

        return double1;
    }

    public void setDouble1(double double1) {

        this.double1 = double1;
    }

我在这里错过了什么?

【问题讨论】:

    标签: java sql-server jpa eclipselink derby


    【解决方案1】:

    数据库表 VTI 'TEST.PERSON' 中显然没有列 DOUBLE1。向 JPA 实体添加新字段不会自动使其也出现在数据库中。

    【讨论】:

    • 我没有创建表我只是用我需要的字段创建了类
    • 您可能已经将 EclipseLink 配置为自动为您创建表。然而,这意味着表是自动创建的,但不会自动修改(如果已经存在并且对实体进行了更改)。我完全不知道您使用的是哪个数据库,但我很确定它附带了一个文档,告诉您如何将列添加到现有表中。或者,您可以删除现有表(以及所有数据)并让 EcliplseLink 为您创建一个包含正确列的新表。
    • 我使用 Derby Db,我应该如何删除现有表?谢谢!
    • 你也可以使用这里描述的“create-or-extend-tables”:wiki.eclipse.org/EclipseLink/DesignDocs/368365
    • @Chris:好点子。我不知道最新版本的 EclipseLink 中添加了扩展功能。
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2013-03-05
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2021-10-26
    相关资源
    最近更新 更多