HibernateのGenerator属性は7種類のクラスがあり、この7種類のクラスの意味と使い方を簡単に説明した.
3792 ワード
要約:http://hi.baidu.com/bwach/blog/item/404d60b15b78475e0823026c.html
1、identity:MySqlデータベースに使用します.
特徴:インクリメント
2、sequence:Oracleデータベース用
4、hilo:高低位でidを合成し、表hi_を先に建てます.value、列next_を再構築する.value.初期値が必要です.
increamentもあるみたいですが?以下のとおりです
メインキージェネレータオプションの説明:1)Asigned
メインキーは外部プログラムによって生成されます.Hibernateが参加する必要はありません.2)hi loはhi/loアルゴリズムによって実現される主キー生成機構であり、主要キー生成履歴状態を追加的なデータベーステーブルに保存する必要がある.3)seqhiloはhi loと同様に、hi/loアルゴリズムによって実現された主キー生成機構は、主キー履歴状態のみSequenceに保存され、OracleのようなSequenceをサポートするデータベースに適用されます.4)incrementキーは数値順に増加します.このような実現メカニズムは、現在のアプリケーション・インスタンスにおいて、現在の最大値を保持する変数であり、その後、キーを生成する必要があるたびに、この値をプライマリキーとして加算する.このような方法で発生する可能性のある問題は、現在複数のインスタンスが同じデータベースにアクセスしている場合、それぞれのインスタンスがプライマリキーの状態を維持しているため、異なるインスタンスが同じプライマリキーを生成して、プライマリキーの反復異常を引き起こす可能性があることである.したがって、同じデータベースが複数のインスタンスアクセスがある場合、この方法は使用を避ける必要があります.5)identityはデータベースから提供されるプライマリキーの生成機構を採用する.DB 2、SQL Server、MySQLのキー生成機構のようです.6)sequenceはデータベースから提供されるsequenceメカニズムを用いてメインキーを生成する.OralceのSequenceのようです.7)nativeは、Hibernateによってベースデータベースに基づいて、identity、hilo、sequenceのうちの一つをプライマリキーとして生成する方式を自ら判断する.8)uuid.hexは、128ビットの一意値生成アルゴリズムに基づいて、プライマリキーとしてHibernateによって16進数値(符号化後、長さ32の文字列で表される)を生成する.9)uuid.stringはuuid.hexと似ていますが、生成されたメインキーだけが符号化されていません(長さ16).いくつかのデータベースでは、PostgreSQLなどの問題が発生する可能性があります.10)foreignは、外部テーブルのフィールドをメインキーとして使用します.一般的に、uuid.hex方式を用いてプライマリキーを生成すると、最適な性能とデータベースプラットフォームの適応を提供する.また、Oracle、DB 2、SQLServer、MySqlなどの一般的なデータベースにより、使用しやすいプライマリキー生成機構(AutoIncreaseフィールドまたはSequence)が提供されている.データベースから提供される主キー生成機構には、GEnerator-class=nativeの主キー生成方式を採用することができます.ただし、いくつかのデータベースで提供されているキー生成メカニズムは、効率的には必ずしも最適ではなく、大送信のinsertデータでは、テーブル間のインターロックを引き起こす可能性があります.データベースが提供するメインキーの生成メカニズムは、現在のメインキーの状態を内部テーブルに保存することによって(自己増加型のメインキーに対しては、この内部テーブルでは現在の最大値とインクリメント量が維持されています)、その後、挿入データごとにこの最大値を読み取り、さらに増分を新たな記録のキーとして追加します.その後、この新しい最大値を内部テーブルに更新します.このように、一回のInsert操作によって、データベース内部で複数回テーブル読み取りと書き込みを行うことができます.また、データのロック解除操作も伴って、性能に大きな影響を与えます.このため、Insertを併発するには高いシステムが必要であり、uuid.hexをメインキーとして生成する仕組みが推奨されている.3カスタマイズされたプライマリキー生成アルゴリズムが必要であれば、ここにメインキージェネレータを配置し、マスタージェネレータはnet.sf.hibernate.id.Identifer Generatorインターフェースを実現しなければならない.
1、identity:MySqlデータベースに使用します.
特徴:インクリメント
< id name="id" column="id">
< generator class="identity"/>
< /id>
注:MySqlデータベースにインクリメントシーケンスを使用するには、テーブルを作る際に、メインキーにaut_を指定する必要があります.increment属性2、sequence:Oracleデータベース用
< id name="id" column="id">
< generator class="sequence">
< param name="sequence"> < /param>
< /generator>
< /id>
3、native:データベースをまたぐ時に使うと、下の方言から生まれます.Default.sequenceはhibernate_sequence< id name="id" column="id">
< generator class="native"/>
< /id>
注:nativeを使うときはHibernateはデフォルトではOracleの中のhibernateを検索します.sequenceシーケンスOracleにこのシーケンスがないと、Oracleデータベースに接続されているときにエラーが発生します.4、hilo:高低位でidを合成し、表hi_を先に建てます.value、列next_を再構築する.value.初期値が必要です.
< id name="id" column="id">
< generator class="hilo">
< param name="table">high_val< /param>
< param name="column">nextval< /param>
< param name="max_lo">5< /param>
< /generator>
< /id>
5、sequencehilo:高すぎる低位の合成idと、sequenceシーケンスを構築し、表を作る必要がない.< id name="id" column="id">
< generator class="hilo">
< param name="sequence">high_val_seq< /param>
< param name="max_lo">5< /param>
< /generator>
< /id>
6、assigned:ユーザーカスタムid;< id name="id" column="id">
< generator class="assigned"/>
< /id>
7、foreign:1対1の関係で主健を共有する場合に使用します.2 idの値は同じです.increamentもあるみたいですが?以下のとおりです
メインキージェネレータオプションの説明:1)Asigned
メインキーは外部プログラムによって生成されます.Hibernateが参加する必要はありません.2)hi loはhi/loアルゴリズムによって実現される主キー生成機構であり、主要キー生成履歴状態を追加的なデータベーステーブルに保存する必要がある.3)seqhiloはhi loと同様に、hi/loアルゴリズムによって実現された主キー生成機構は、主キー履歴状態のみSequenceに保存され、OracleのようなSequenceをサポートするデータベースに適用されます.4)incrementキーは数値順に増加します.このような実現メカニズムは、現在のアプリケーション・インスタンスにおいて、現在の最大値を保持する変数であり、その後、キーを生成する必要があるたびに、この値をプライマリキーとして加算する.このような方法で発生する可能性のある問題は、現在複数のインスタンスが同じデータベースにアクセスしている場合、それぞれのインスタンスがプライマリキーの状態を維持しているため、異なるインスタンスが同じプライマリキーを生成して、プライマリキーの反復異常を引き起こす可能性があることである.したがって、同じデータベースが複数のインスタンスアクセスがある場合、この方法は使用を避ける必要があります.5)identityはデータベースから提供されるプライマリキーの生成機構を採用する.DB 2、SQL Server、MySQLのキー生成機構のようです.6)sequenceはデータベースから提供されるsequenceメカニズムを用いてメインキーを生成する.OralceのSequenceのようです.7)nativeは、Hibernateによってベースデータベースに基づいて、identity、hilo、sequenceのうちの一つをプライマリキーとして生成する方式を自ら判断する.8)uuid.hexは、128ビットの一意値生成アルゴリズムに基づいて、プライマリキーとしてHibernateによって16進数値(符号化後、長さ32の文字列で表される)を生成する.9)uuid.stringはuuid.hexと似ていますが、生成されたメインキーだけが符号化されていません(長さ16).いくつかのデータベースでは、PostgreSQLなどの問題が発生する可能性があります.10)foreignは、外部テーブルのフィールドをメインキーとして使用します.一般的に、uuid.hex方式を用いてプライマリキーを生成すると、最適な性能とデータベースプラットフォームの適応を提供する.また、Oracle、DB 2、SQLServer、MySqlなどの一般的なデータベースにより、使用しやすいプライマリキー生成機構(AutoIncreaseフィールドまたはSequence)が提供されている.データベースから提供される主キー生成機構には、GEnerator-class=nativeの主キー生成方式を採用することができます.ただし、いくつかのデータベースで提供されているキー生成メカニズムは、効率的には必ずしも最適ではなく、大送信のinsertデータでは、テーブル間のインターロックを引き起こす可能性があります.データベースが提供するメインキーの生成メカニズムは、現在のメインキーの状態を内部テーブルに保存することによって(自己増加型のメインキーに対しては、この内部テーブルでは現在の最大値とインクリメント量が維持されています)、その後、挿入データごとにこの最大値を読み取り、さらに増分を新たな記録のキーとして追加します.その後、この新しい最大値を内部テーブルに更新します.このように、一回のInsert操作によって、データベース内部で複数回テーブル読み取りと書き込みを行うことができます.また、データのロック解除操作も伴って、性能に大きな影響を与えます.このため、Insertを併発するには高いシステムが必要であり、uuid.hexをメインキーとして生成する仕組みが推奨されている.3カスタマイズされたプライマリキー生成アルゴリズムが必要であれば、ここにメインキージェネレータを配置し、マスタージェネレータはnet.sf.hibernate.id.Identifer Generatorインターフェースを実現しなければならない.