【问题标题】:error while tring to create new entry on jpa table尝试在 jpa 表上创建新条目时出错
【发布时间】:2013-03-05 23:43:28
【问题描述】:

我使用以下代码向 JPA 插入数据,当我尝试提交时出现错误,该对象包含完整数据,所以我不明白我在这里遗漏了什么,知道吗?

    entityManager.getTransaction().begin();
    entityManager.persist(object);
    entityManager.getTransaction().commit();

带有所有 getter 和 setter 的实体看起来像这样

@Entity
public class LeaveRequest {

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String type;
private String from;
private String to;
private String length;
private String state;

public int getId() {

    return id;
}

错误是:

Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "FROM" at line 1, column 31.
Error Code: 20000
Call: INSERT INTO LEAVEREQUEST (ID, FROM, LENGTH, STATE, TO, TYPE) VALUES (?, ?, ?, ?, ?, ?)
    bind => [6 parameters bound]
Query: InsertObjectQuery(LeaveRequest [id=1, type=VACATION, from=2012-12-27, to=2012-12-27, length=1 day, state=Rejected]) 

【问题讨论】:

    标签: java jpa eclipselink entitymanager


    【解决方案1】:

    FROM 是 sql 保留关键字。

    只需更改变量名或使用@Column注解更改表列的列名即可。

    【讨论】:

    • 如果您对标识符进行分隔(例如"FROM"),许多数据库将允许您使用保留字作为标识符。您可以通过 @Column 注释 (@Column(name="\"FROM\"")) 来做到这一点。
    • @BrianVosburgh 我不知道,但又值得吗?我个人觉得这种方法会影响查询的可读性......
    【解决方案2】:

    哇,酷。您有一个名为“from”的属性,它与 SQL 保留字冲突。 我会说这是您的 jpa 提供程序中的一个错误,但谁知道呢,也许这种行为是符合 jpa 的。作为一种解决方法,您可以重命名数据库中的列并将@column 注释添加到 from 属性,name="newcolumnname"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多