2017-02-02 19 views
0

私はHibernateで非常に新しいです。私はJPAでHibernateを使用しています。私は注釈付きエンティティクラスと、そのエンティティクラスに関連するテーブルを持っています。Hibernateのキー 'PRIMARYの重複エントリ' 59 'を削除します

@Entity 
public class Test implements Serializable { 
    @Id 
    @GenericGenerator(name="inc" , strategy="identity") 
    @GeneratedValue(generator="inc") 
    private int id; 

    private String address; // setter getter and constructor 
} 

このエンティティを保存するときは、データをdbに挿入します。しかし、アプリケーション実行中に別のアプリケーションが同じテーブルにデータを挿入しています。私のアプリケーションがデータを保存しようとすると、キー 'PRIMARY'例外の重複エントリ '59'が生成されます。だから私はデータを挿入し、アプリケーションレベルではなくデータベースレベルでIDを生成するジェネレータを使用したいと思います。識別子は自分のエンティティに保存する必要があります。

答えて

0

テーブルジェネレータ戦略またはシーケンスジェネレータを使用します。

+0

を見つけたことができます。しかし、エンティティを挿入する前に毎回max(id)を得ることができるジェネレータが必要です。 Bczそれかもしれない、誰かが手動でテーブルにデータを挿入します。その時、テーブルジェネレータも失敗します。親切に私を導く。 –

+0

誰かが直接テーブルを更新する場合は、手動でIDを管理する必要があります。つまり、レコードを挿入する前に最大IDを取り出して+1してください。 –

0

ジェネレータを指定する必要はありません。デフォルトのジェネレータを使用することができ、IDを手動で設定することはできません。エラーが依然としてマージ/永続メソッドのポストに来る場合。発電機について

詳しい情報は、私はあなたに同意ここhttps://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

@Entity 
public class Test implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    private String address; // setter getter and constructor 
} 
関連する問題