2016-04-01 13 views
0

私は、Spring MVCとMySQLデータベースを使用して、MyEclipseでScaffoldingを使用してWebアプリケーションプロジェクトを生成します。問題を解決するための手がかりを教えてください。Spring @GeneratedValueアノテーションが自動インクリメントフィールドで機能しない

idプライマリキーに問題が発生します。 @GeneratedValue(戦略= GenerationType.IDENTITYを) @GeneratedValue(戦略= GenerationType.AUTO) @GeneratedValue(戦略= GenerationType.SEQUENCE) @GeneratedValue(戦略= GenerationType:それは私が使用している場合ではない自動インクリメントイベントを行います。 TABLE)

私は主キーがAUTO_INCREMENTに設定されたいくつかのテーブルを持っています。この例のように:

CREATE TABLE IF NOT EXISTS `ehealthdb`.`timestamp` (
    `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '', 
    `login_date` DATETIME NULL COMMENT '', 
    `logout_date` DATETIME NULL COMMENT '', 
    `create_date` DATETIME NOT NULL COMMENT '', 
    `update_date` DATETIME NULL COMMENT '', 
    `isActive` TINYINT(1) NULL COMMENT '', 
    PRIMARY KEY (`id`) COMMENT '') 
ENGINE = InnoDB; 

私が使用しようとすると生成されたポストのURLを使用して保存し、次のようなJSONペイロード:

{ 
"loginDate":"1374839856000", 
"logoutDate":"1374839856000", 
"createDate":"1374839856000", 
"updateDate":"1374839856000", 
"isActive":true 
} 

要求処理が失敗しました。ネストされた例外はjavax.persistence.PersistenceExceptionです: org.hibernate.id.IdentifierGenerationException:このクラス のIDを手動で()のセーブを呼び出す前に割り当てる必要があります。ehealth.domain.Timestamp

私はこれがあると思います@GeneratedValueが足りないために、主なキーで足場が作成されていません。私は手動で以下のように追加しなければならなかった:

しかし、それはまだ動作しません。それでもエラーになります。

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) //add this 
@Column(name = "id", unique = true, nullable = false) 
@Basic(fetch = FetchType.EAGER) 

@XmlElement 
Integer id; 
+0

@Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id")?? –

+0

はい、動作しません。 でも試してみてください: @GeneratedValue(strategy = GenerationType。 –

+0

私はこれを(作成されたテーブル、足場が作成され、@GeneratedValueアノテーションが追加された)ステップを使用して試してみましたが問題はありませんでした。 ID値を使わずに行を手動で(SQL文でコミットして)追加し、それが機能することを確認できますか? –

答えて

0

次をドロップする必要があります。

@Column(name = "id", unique = true, nullable = false) 
@Basic(fetch = FetchType.EAGER) 

これらはすべてのデフォルト値なので、そこにそれを置く必要はありません。 私はそれがあなたの問題を解決するだろうか分からない。

+0

ありがとう、今、データベースにオブジェクトを保存するたびに、設定値0からIDでこの問題を解決できます –

2

IDフィールドをまったく設定しようとしないでください。自動的に処理されます。

@GeneratedValue(strategy = GenerationType.IDENTITY)を使用します。あなたのpersistence.xmlのは、おそらくHibnerateバージョン4または5また

を使用する必要があり

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 

を持っていることを確認し、私は、ID列に FetchTypeを見たことがありません。これを削除します。

@Basic(fetch = FetchType.EAGER) 

私はこれを行う:

また
@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Long id; 

は、おそらく完全なセットアップを理解する必要があります。どのバージョンのSpring?

+1

ありがとう、 データベースにオブジェクトを保存するたびに、この値を0に設定することでこの問題を解決できますが、 DBにid値が生成され、IDフィールドに代入されます。@GeneratedValue .. annotationは不要です。 これらの@Basic(fetch = FetchType.EAGER)は、myeclipseによって生成されます。 –

関連する問題