我使用jpa将对象持久化到mysql数据库。
当我定义一个名为“index”的列时,如下所示,该表将不会在数据库中生成。
当我删除它或重命名它时,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;
*/
}
答案 0 :(得分:3)
正如Hannibal所指出的,index
是MySQL中的保留关键字,因此您不能直接将其用作列名,但您必须将其转义。
hibernate.globally_quoted_identifiers=true
,它将引用所有数据库标识符(来源:Automatic reserved word escaping for Hibernate tables and columns)@Column(name="\"index\"")
,这是一种新的标准化方法来转义单个列答案 1 :(得分:2)
我没有尝试使用mysql,但'index'似乎是一个保留字。
检查this。
答案 2 :(得分:1)
因为索引是保留字。为了使用索引作为列名,您必须使用在[]中写入它。像这样:
@Column(name="[index]")