2012-08-03 8 views
11

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

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

答えて

20

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」と呼ばれるジェネレータを参照しているため、どのテーブルの詳細が表示されていません。

あなたが実行するジェネラルジェネレータ。

  • アイデンティティ - 値がデシベル配列から
  • テーブルが来る - - インサートは、項目の値
  • シーケンスの自動incerement列を尋ねた後、値をデータベース内の別のテーブルから来
  • 自動 - それはpossibで挿入

を行う前に、UUIDを生成 - データベースの種類

  • UUIDに基づいて上記のいずれかを選びますカスタム発電機を開発するデータベースとのやりとりは、世代戦略に依存します。あなたはこの場合、エンティティBeanクラス

    @Id 
    @GeneratedValue 
    @Column(name="CUST_ID") 
    public Long getId() { return id; } 
    

    で使用している場合

  • +0

    dbの視点 – javaNoober

    +0

    からIDENTITYまたはSEQUENCEに対応していただきありがとうございます –

    -3

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

    -3

    Hibernateが生成される主キーの種類を決定し、それはあなたが使用しているデータベースに依存します。デフォルトでは

    @Id注釈が自動的に使用される最も適切な主キー生成戦略を決定しますが、あなたは私がここで議論するつもりはない2つのパラメータ戦略と発電機を取る@GeneratedValue注釈を適用することによって、これをオーバーライドすることができ、デフォルトのキー生成戦略だけを使用しましょう。 Hibernateに、使用するジェネレータタイプを決定させることで、コードを異なるデータベース間で移植することができます。

    +0

    質問は完全にスキップした「how @GeneratedValue works」について説明することでした。 –