2011-01-11 11 views
3

私はを使用しています。Hibernate(JPA)ダービーデータベース - 私のアプリケーションサーバーはJboss 6.0です。 50000人の従業員情報が入ったテーブルを事前に設定しておく必要があり、そのためにスタンドアロンのJDBCプログラムを使用しました。 私のアプリケーションからは、同じテーブルに新しい従業員情報を挿入する必要があります。そのとき、私はJPAを使用します(これはアプリケーションコンテナ内で実行されるためです)。Hibernateの自動生成シリアル番号の変更方法は?

マイEmployeeクラスは、エンティティBeanであり、「イド」欄適切なアウトHibernateの図は、プライマリキーのシリアル番号を実行するように「@GeneratedValue(戦略=オート)」注釈付きの主キーであることを(有しますすなわちId列)。

これで、Hibernateは、Employeeテーブルにすでにエントリがある場合でも、常にこの実行中のシリアルを "1"から開始するという問題があります。私はEntityManagerを使用して、新しいレコードを挿入しようとすると、アプリケーションから::(持続)このように、私はいつも「一意キーまたは主キー制約または一意索引で重複したキー値」のような制約違反エラーが発生します。 Hibernateは、私はすでにIDを持つそのテーブルのエントリを持っているようID = 1で新しいエントリを挿入しようとするため これがある= 1

私の質問は

a)はどのように私は更新することができます休止状態であります'Id'列のシリアル番号が適切に調整されるようにキャッシュを設定しますか? DBからDBに変わることがわかりますが、可能でしょうかすべてにありますか?

b)これを達成する他の方法はありますか?

c)一括挿入(つまり事前投入)を実行するスタンドアロンのJPAプログラムを作成してJbossアプリケーションを起動すると、「実行中のシリアル」を決定できなくなります。任意の提案を事前に

おかげで、 - kuntal

答えて

2

「ID」欄のための私の実行中のシリアル番号がそれに応じて 調整することができるように、a)はどのように私はHibernate'eキャッシュ を更新することができますか?私はそれが からDBに変わることを理解していますが、 で可能ですか?

b) 同じものを実現する他の方法はありますか?

  • @TableGenerator

あなたがテーブルの値に応じて次のIDを生成@TableGeneratorを使用してプライマリ・キーを生成することができ、それを更新する2つのフィールドは&そのそれぞれのID &をTABLENAME有する維持従って挿入後。

それが正しい順序を維持する責任がある、あなたは初期値を変更することができますがなど

@TableGenerator(name = "TABLE_GEN", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "PERSON_ID", initialValue = 1, allocationSize = 1) 
@Id 
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN") 
private int id; 

C)私は 人口を事前に一括挿入(すなわちを行うには、スタンドアロンJPAプログラム を書く場合)その後、私のJboss アプリケーションを起動し、 "を実行しているシリアル"を正しく決定することができる休止されます いいえ? IDの生成のための共通のテーブルを消費し、1)アプリケーション& 2)スタンドアロンプ​​ログラムので、一意または主キー制約または一意でない重複したキー値が存在しないであろう - 終了時にそう

、のための2つのジェネレータを作成しますインデックス

+0

優秀!できます ! – javauser71

+0

私はEmployeeテーブルに値を設定しなければならないので、initialValueを使用しませんでした。したがって、initialValueはそこにある従業員エントリの数にする必要があります。だからEmployeeテーブルに値を設定した後、SEQUENCE_TABLEを適切な数(たとえば100)で更新しました。それから私はjboss-appを始めました。新しいレコードを挿入すると、idは101で始まり、これは私が期待していたものです。正しい解決に感謝します。乾杯! – javauser71

+0

こちらも同様の例ですhttp://ja.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing – javauser71

0

hibernate.cfg.xmlファイルキャッシュを設定するための二次キャッシュを活性化するためのhibernate.cache.provider_classでなければならないプロパティタグでused.The名です。 hibernate.cache.use_second_level_cacheプロパティを使用すると、2次キャッシュをアクティブ化および非アクティブ化できます。デフォルトでは、第2レベルのキャッシュが有効化され、EHCacheが使用されます。

ソフトウェアテストサービス