2011-09-19 15 views
2

多くのジェネレータクラスは、識別子を生成するためにhttp://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml にあります。しかし、もし私がインクリメントとシーケンスを見れば、私は違いが何であり、どちらが良いのか分かりません。Hibernateジェネレータクラスのインクリメントとシーケンス?

+0

を試すことができますか?あなたが何を求めているのか分かりません。 – brc

答えて

13

Sequenceは、idを生成するためにデータベース・シーケンス(Oracleなど)を使用しますが、incrementは、jvmのidを追跡し、プロセス内でそれを増分します。他のプログラム/人がデータベーステーブルに挿入しようとすると、シーケンスが安全になります。シーケンスを使用するには

  1. データベースがシーケンスをサポートしなければならない(、PostgreSQLのオラクル、DB2を...)
  2. あなたはシーケンスを作成する必要があります(CREATE SEQUENCE mySquence;

Incrementが少ない方が安全です(しかし、シーケンスをサポートしていないDBには移植性があります)、テストや始動に適しています。プロダクションでの使用にはIncrementを使用するよりも良い方法があります(例えば、ネイティブ/アイデンティティなど)。

3

私は自動生成値を使用します。 Hibernateはあなたが使用しているDBのための最良の戦略を作り出します。

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 

はまた、あなたがあなたのエンティティを変更することなく、HSQLDBのようなメモリDBでシンプルに対してテストできることを意味します。

+0

これは質問に答えません – Karl

0

あなたが質問を言い換えることができます。このライン

@GenericGenerator(name = "increment", strategy = "increment") 
@GeneratedValue(generator = "increment") 
関連する問題