2013-03-17 75 views
0

即时通讯使用以下代码插入数据到JPA和我得到错误,当我试图做提交时,对象是与完整的数据,所以我不明白我失去了什么这里有什么想法?错误,同时创建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]) 

回答

4

FROM是一个SQL保留关键字。

只需更改变量名称或使用@Column注释来更改表格列的列名称。

+0

许多数据库将允许您使用保留字作为标识符(如' “FROM”')。您可以通过'@ Column'注释('@Column(name =“\”FROM \“”)'')来做到这一点。 – 2013-03-17 17:24:22

+0

@BrianVosburgh我不知道,但是这又值得吗?就我个人而言,我觉得这种方法会混淆查询可读性.... – Thihara 2013-03-18 04:19:45

0

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