1

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;
     */
}
4

3 に答える 3

3

Hannibal が指摘したように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 に答える