15

@GeneratedValue の正確な説明と、データベースの観点から何が起こるかに関するさまざまな戦略を見つけるのに苦労しています。

データベースは常にクエリされ、利用可能な最後の値が返されますか? 2 つの異なるプロセス (異なる Hibernate アプリ) が同じテーブルに同時にアクセスするとどうなりますか?具体的には、自動数値とシーケンスを使用して

4

2 に答える 2

23

JPA@GeneratedValueを参照していると想定しています。

注釈は、その@GeneratedValueフィールドの値を把握する方法をORMに指示します。

例えば:

 @Id
 @GeneratedValue(strategy=SEQUENCE, generator="CUST_SEQ")
 @Column(name="CUST_ID")
 public Long getId() { return id; }

 Example 2:

 @Id
 @GeneratedValue(strategy=TABLE, generator="CUST_GEN")
 @Column(name="CUST_ID")
 Long id;

理解しておくべき重要なことは、生成された値には戦略があり、生成された値の戦略が何が起こるかを決定するということです。上記の例では、SEQUENCE生成戦略は、オブジェクトを初めて保存するときに、ORMがデータベースにシーケンスの新しい値を要求することを意味します。2番目の例では、テーブル生成戦略を指定します。これは、ORMがテーブル内の行を参照してIDの値を決定することを意味します。例2では、​​「CUST_GEN」というジェネレーターを参照しているため、使用されているテーブルの詳細は表示されていません。

あなたが遭遇する典型的なジェネレータ。

  • アイデンティティ-挿入後、自動インセレメント列にアイテムの値を尋ねます
  • シーケンス-値はdbシーケンスから取得されます
  • table-値はデータベース内の別のテーブルから取得されます
  • auto-データベースタイプに基づいて上記のいずれかを選択します
  • UUID-挿入を行う前にUUIDを生成します

カスタムジェネレータを開発することが可能です。データベースとの相互作用は、生成戦略によって異なります。

于 2012-08-03T02:46:55.087 に答える
-3

参考のためにhttp://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/リンクを使用してください。しかし、あなたが探している具体的なものを教えてくれれば、私はあなたをより良く助けることができるかもしれません。@GeneratedValueアノテーションの詳細はここにあります…同じトピックに関するこのブログ投稿が大好きですhttp://elegando.jcg3.org/2009/08/hibernate-generatedvalue/。彼は説明するのに良い仕事をしました。

于 2012-08-03T02:45:48.657 に答える