1

我使用 jpa 将对象持久保存到 mysql 数据库。

当我像下面定义一个名为“索引”的列时,该表将不会在数据库中生成。

当我删除它或重命名它时,jpa 工作正常。

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import play.db.jpa.GenericModel;

@Entity
@Table(name="QA_ASSETVM")
public class QAAssetVM extends GenericModel{

     private static final long serialVersionUID = 1L;

     @Id 
     @Column(name="vmassetname")
     public String vmassetname;

     @Column(name="assetvm_index")  //this works fine!
     public int index;
     /*
     @Column(name="index")  //When I add this, the table "QA_ASSETVM" will not be generated by jpa in database.
     public int index;
     */
}
4

3 回答 3

3

正如汉尼拔指出的那样,index是 MySQL 中的保留关键字,因此您不能直接将其用作列名,但您必须对其进行转义。

  1. 如果您使用的是 Hibernate 3.5+,请尝试使用hibernate.globally_quoted_identifiers=true,它将引用所有数据库标识符(来源:Hibernate 表和列的自动保留字转义
  2. 在 JPA 2.0 中,您可以使用注解:@Column(name="\"index\""),这是转义单个列的新标准化方法
于 2013-08-20T10:00:43.953 回答
2

我没有尝试过使用 mysql,但 'index' 似乎是一个保留字。

看看这个

于 2013-08-20T02:36:46.350 回答
1

因为 index 是保留字。为了使用索引作为列名,您必须在 [] 中使用它。像这样 :

@Column(name="[index]")
于 2017-09-19T10:49:37.297 回答