Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次 索引 |
第3部 EJB編 | > 第13章 Entity Beanの実装 |
Primary Keyクラスは、Entity Beanのインスタンスの識別子となるクラスで、特定のインスタンスを検索するのに使用されます。
EJBコンテナは、データベースから取得したプライマリキーに対応するインスタンスを、キャッシュします。
finderメソッドが実行された場合には、equalsメソッドとhashcodeメソッドを使用して、同じプライマリキーのインスタンスがキャッシュされているかを判定して、プライマリキーが合致する場合には、キャッシュされているEJB objectを返却します。
Interstage Studioを使用している場合は、自動的に生成されます。
Primary Keyクラスは以下の規約を満たしていなければなりません。
equalsメソッドとhashcodeメソッドには以下のような特徴があります。
コンテナがインスタンスを検索する際に、プライマリキーの値が同一かを判断するために実行します。
また、EJBObjectクラスのisIdenticalメソッドを実行した際に実行されます。
equalsメソッドを実行する前に、インスタンスの絞り込みを行うためのメソッドです。異なるインスタンスに対してできるだけ異なる値を返却するようにhashcodeメソッドを定義しておくと、コンテナがインスタンスを検索する際の性能を向上できます。
1) UserTransaction.begin
2) SampleRemote EO1 = SampleHome.findByPrimaryKey(PK1) ※
3) 更新処理
4) SampleRemote EO2 = SampleHome.findByPrimaryKey(PK1) ※
5) 更新処理
6) UserTransaction.rollback
※PK1は同じPrimaryKey値
上記EO1とEO2では、異なるEJB objectが返却されるため、3)や5)の更新処理が反映されないといった問題が発生する可能性があります。
固定長文字列のDBカラムをプライマリキーとして使用する場合は、以下を考慮してください。
CMPでプライマリキーのフィールドが1つの場合で、フィールドが以下の型の場合には、Primary Keyクラスを作成しないことも可能です。
この場合、通常はPrimary Keyクラスを指定するHomeインタフェースのcreateメソッドやfindByPrimaryKeyメソッドなどの引数には以下のように、プライマリキーのフィールドを指定します。
例)プライマリキーがString型の場合
--------------------------------------------------------------------------------------- public SampleRemote create(String pkField) throws javax.ejb.DuplicateKeyException, javax.ejb.CreateException, java.rmi.RemoteException; public SampleRemote findByPrimaryKey(String pkValue) throws javax.ejb.FinderException, javax.ejb.ObjectNotFoundException, java.rmi.RemoteException;
---------------------------------------------------------------------------------------
また、deployment descriptorの“Primary Keyクラス名”にはプライマリキーのフィールドの型(java.lang.Stringなど)を指定し、“Primary Keyフィールド名”にはフィールド名を指定してください。
目次 索引 |