(57)【特許請求の範囲】
【請求項１】
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更する除外部と、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加する追加部と、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更する第一の変更部と、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する第二の変更部とを有する情報処理装置。
【請求項２】
前記第一の変更部は、前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合と当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合とを、前記連動オブジェクトに参照させ、前記連動オブジェクトを前記第一の属性に設定するように前記定義情報を変更し、
前記連動オブジェクトは、前記第一の属性に対する変更要求に応じ、当該連動オブジェクトが参照する前記第二のクラスのオブジェクトの集合及び前記識別属性の値の集合を変更する請求項１記載の情報処理装置。
【請求項３】
前記第二の変更部は、前記第一の属性の取得要求に応じた処理について、前記第一の属性に前記連動オブジェクトが設定されている場合は、当該連動オブジェクトを返却し、前記第一の属性に前記連動オブジェクトが設定されていない場合は、前記第二の属性に設定されている前記識別属性の値の集合に対応する前記第二のクラスのオブジェクトの集合を永続化先より取得し、取得された該集合を前記連動オブジェクトに参照させ、該連動オブジェクトを返却するように、前記定義情報を変更する請求項２記載の情報処理装置。
【請求項４】
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更し、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加し、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更し、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する処理をコンピュータが実行する情報処理方法。
【請求項５】
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更し、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加し、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更し、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）やＣ＋＋等は、オブジェクト指向プログラム言語として知られている。オブジェクト指向プログラム言語を用いて作成されたプログラムでは、オブジェク間の協調動作によって機能が実現される。オブジェクトは、メソッドとデータとを有し、その構造はクラスとして定義される。換言すれば、オブジェクトは、クラスのインスタンス（実体）である。
【０００３】
オブジェクトをデータベース等のデータストアに永続化する技法として、オブジェクト関係マッピング（ＯＲＭ：Object Relation Mapping）が知られている。
【０００４】
図１は、オブジェクト関係マッピングを説明するための図である。同図に示されるように、オブジェクト関係マッピングでは、オブジェクトとデータストアのレコードとの対応付けが自動的に行われる。すなわち、オブジェクト関係マッピングでは、オブジェクトからデータストアのレコードへの変換、及びデータストアのレコードからオブジェクトへの変換等が自動的に行われる。また、オブジェクト関係マッピングでは、オブジェクト間の関連（参照関係）に関しても、自動的にデータストアのレコードとの対応付け及び変換が行われる。
【０００５】
図２は、参照関係を有するオブジェクトに関するオブジェクト関係マッピングの例を示す図である。
【０００６】
同図では、Ｅｍｐｌｏｙｅｅオブジェクトとｄｅｐａｒｔｍｅｎｔオブジェクトとが示されている。Ｅｍｐｌｏｙｅｅオブジェクトとｄｅｐａｒｔｍｅｎｔオブジェクトとの間には、参照関係Ｒ１が形成されている。すなわち、Ｅｍｐｌｏｙｅｅオブジェクトは、ｄｅｐａｒｔｍｅｎｔオブジェクトを参照している。
【０００７】
この場合、オブジェクト関係マッピングによれば、Ｅｍｐｌｏｙｅｅオブジェクトとｄｅｐａｒｔｍｅｎｔオブジェクトとは、それぞれに対応するテーブルのレコードに変換されて永続化される。同図では、Ｅｍｐｌｏｙｅｅオブジェクトは、テーブルＴ１のレコードに変換されて永続化される。また、ｄｅｐａｒｔｍｅｎｔオブジェクトは、テーブルＴ２のレコードに変換されて永続化される。
【０００８】
また、参照関係Ｒ１は、Ｅｍｐｌｏｙｅｅオブジェクトに対応するレコードの項目に変換されて永続化される。同図において、当該項目は、テーブルＴ１における、「部署ＩＤ＜ＦＫ＞」である。当該項目の値は、オブジェクト関係マッピングによって、テーブルＴ２のレコードに対応するオブジェクトへの参照関係であると解釈される。
【０００９】
上記より明らかなように、オブジェクト関係マッピングを利用することにより、オブジェクトを利用するアプリケーションプログラムのソースコード上では、オブジェクトの永続化先のデータストアの構造等が意識される必要はない。
【００１０】
なお、Ｊａｖａ（登録商標）では，オブジェクト関係マッピングのＡＰＩ（Application Program Interface）の標準仕様としてＪＰＡ（Java（登録商標） Persistence API）及びＪＤＯ（Java（登録商標） Data Objects）等が策定されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００１−５１８７９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
他方において、ＲＤＢ（Relational Database：関係データストア）やＫＶＳ（Key-Value Store：キーバリューストア）等、特性の異なる複数のデータストアを併用することが、例えば、大規模なデータ処理が必要なシステムでは効果的であるとされている。そこで、斯かるシステムがオブジェクト指向プログラミングによって実装される場合、オブジェクト関係マッピングの実装（以下、「オブジェクト関係マッピング実装」という。）を利用して、各オブジェクトを特性の異なる複数のデータストアに分散して永続化することが考えられる。
【００１３】
しかしながら、通常、参照関係にあるオブジェクト群は、単一のデータストア内に永続化される必要がある。これは、各参照関係の整合性（参照先のオブジェクトがデータストア中に存在する状態）を単一のデータストア内で保とうとするオブジェクト関係マッピングの参照整合性制約のためである。したがって、参照整合性制約の下では、参照関係にある各オブジェクトを各々異なるデータストアに永続化することはできない。
【００１４】
具体的には、参照先が複数であるオブジェクト間の参照関係は、参照元のオブジェクトにおいて、参照先のオブジェクトへの参照（オブジェクト参照）を要素とするコレクション型のフィールド（以下、「参照要素コレクションフィールド」という。）によって保持される。参照（参照）とは、オブジェクトを参照することを表すデータである。参照の値は、例えば、参照先のオブジェクトのメモリアドレスである。また、フィールドとは、オブジェクトが有する属性項目をいい、メンバ変数とも呼ばれる。また、コレクションとは、リストやセット等、複数のデータを格納できるデータ構造体をいう。
【００１５】
参照元のオブジェクトＡをデータストアに永続化するには、オブジェクトＡが有する参照要素コレクションフィールドが永続化対象としてオブジェクト関係マッピング実装に与えられる。しかし、オブジェクトＡの永続化先のデータストアと、参照要素コレクションフィールドが参照するオブジェクト群の永続化先データストアが異なる場合、参照整合性制約により、オブジェクトＡの永続化はエラーとなってしまう。
【００１６】
そこで、1側面では、オブジェクト間の参照関係を複数のデータストアに跨って永続化することのできる情報処理装置、情報処理方法、及びプログラムの提供を目的とする。
【課題を解決するための手段】
【００１７】
一つの案では、情報処理装置は、第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更する除外部と、前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加する追加部と、前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更する第一の変更部と、前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する第二の変更部とを有する。
【発明の効果】
【００１８】
一態様によれば、オブジェクト間の参照関係を複数のデータストアに跨って永続化することができる。
【図面の簡単な説明】
【００１９】
【図１】オブジェクト関係マッピングを説明するための図である。
【図２】参照関係を有するオブジェクトに関するオブジェクト関係マッピングの例を示す図である。
【図３】本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。
【図４】本発明の実施の形態における情報処理装置の機能構成例を示す図である。
【図５】本実施の形態におけるオブジェクト間の参照関係の一例を示す図である。
【図６】Ｄｅｐａｒｔｍｅｎｔオブジェクトに識別要素コレクションフィールドが追加された状態を示す図である。
【図７】参照要素コレクションフィールドのｓｅｔｔｅｒの呼び出し前のＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【図８】参照要素コレクションフィールドのｓｅｔｔｅｒの呼び出し後のＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【図９】ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されていないＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【図１０】連動コレクションオブジェクトを説明するための図である。
【図１１】連動コレクションクラスの定義例を示す図である。
【図１２】変更対象クラス定義ファイルの選択処理の処理手順の一例を説明するためのフローチャートである。
【図１３】Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。
【図１４】Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルの定義例を示す図である。
【図１５】オブジェクト配置定義記憶部の構成例を示す図である。
【図１６】変更対象クラス定義ファイルの変更処理の処理手順の一例を説明するためのシーケンス図である。
【図１７】識別要素コレクションフィールドの追加後のＤｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。
【図１８】参照要素コレクションフィールドに関して変更が行われた後のＤｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。
【図１９】オブジェクトの永続化時の処理手順の一例を説明するためのシーケンス図である。
【図２０】オブジェクトの永続化時の処理手順の一例を説明するためのシーケンス図である。
【図２１】各オブジェクトの状態の例を示す第一の図である。
【図２２】各オブジェクトの状態の例を示す第二の図である。
【図２３】各オブジェクトの状態の例を示す第三の図である。
【図２４】Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトの永続化状態の例を示す図である。
【図２５】永続化されているオブジェクトの取得時の処理手順の一例を説明するためのシーケンス図である。
【図２６】永続化されているオブジェクトの取得時の処理手順の一例を説明するためのシーケンス図である。
【図２７】永続化されているオブジェクトの取得時の処理手順の一例を説明するためのシーケンス図である。
【図２８】各オブジェクトの状態の例を示す第四の図である。
【図２９】各オブジェクトの状態の例を示す第五の図である。
【図３０】ダーティチェック時に実行される処理手順の一例を説明するためのシーケンス図である。
【図３１】ダーティチェック時に実行される処理手順の一例を説明するためのシーケンス図である。
【図３２】各オブジェクトの状態の例を示す第六の図である。
【図３３】各オブジェクトの状態の例を示す第七の図である。
【図３４】ダーティチェック後のＤｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトの永続化状態の例を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面に基づいて本発明の実施の形態を説明する。図３は、本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。同図の情報処理装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００２１】
情報処理装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００２２】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って情報処理装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００２３】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００２４】
図４は、本発明の実施の形態における情報処理装置の機能構成例を示す図である。同図において、情報処理装置１０は、変更対象選択部１１、クラス定義変更部１２、連動コレクションオブジェクト生成部１３、Ｏ／Ｒマッパーアクセス部１４、Ｏ／Ｒマッパー部１５ａ、及びＯ／Ｒマッパー部１５ｂ等を有する。これら各部は、情報処理装置１０にインストールされたプログラムがＣＰＵ１０４に実行させる処理により実現される。また、情報処理装置１０は、クラス定義ファイル記憶部２１、オブジェクト配置定義記憶部２２、データストア１６ａ、及びデータストア１６ｂ等を有する。これら各記憶部又はデータストアは、補助記憶装置１０２又は情報処理装置１０とネットワークを介して接続される記憶装置等を用いて実現可能である。
【００２５】
データストア１６ａ及びデータストア１６ｂ（以下、双方を区別しない場合、「データストア１６」という。）は、オブジェクトの永続化先として利用される、データベース等のデータストアである。本実施の形態において、データストア１６ａ及びデータストア１６ｂは、参照関係にあるオブジェクト群を、該参照関係を跨って永続化先する。
【００２６】
図５は、本実施の形態におけるオブジェクト間の参照関係の一例を示す図である。同図において、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、一つの部門を表現するＤｅｐａｒｔｍｅｎｔクラスのインスタンスである。Ｄｅｐａｒｔｍｅｎｔオブジェクト（Ｄｅｐａｒｔｍｅｎｔクラス）は、「ｉｄ」又は「ｅｍｐｌｏｙｅｅｓ」等をフィールド名とするフィールドを有する。フィールドとは、オブジェクトが有する属性の項目をいい、メンバ変数とも呼ばれる。Ｄｅｐａｒｔｍｅｎｔオブジェクトのｉｄフィールドは、部門を一意に識別する情報（例えば、部門名）を値とする。ｅｍｐｌｏｙｅｅｓフィールドは、Ｅｍｐｌｏｙｅｅオブジェクトへの参照（オブジェクト参照）を要素とするコレクション型のオブジェクトである参照要素コレクションオブジェクトへの参照（オブジェクト参照）を値とする。すなわち、ｅｍｐｌｏｙｅｅｓフィールドは、Ｅｍｐｌｏｙｅｅオブジェクト（のオブジェクト参照）の集合である。参照（オブジェクト参照）とは、オブジェクトを参照することを表すデータである。参照の値は、例えば、参照先のオブジェクトのメモリアドレスである。なお、ｅｍｐｌｏｙｅｅｓフィールドのように、他のオブジェクトへの参照を要素とするコレクション型のフィールドを、以下「参照要素コレクションフィールド」という。
【００２７】
Ｅｍｐｌｏｙｅｅオブジェクトは、一人の従業員を表現するＥｍｐｌｏｙｅｅクラスのインスタンスである。同図において、Ｅｍｐｌｏｙｅｅオブジェクトは、「ｉｄ」又は「ｎａｍｅ」等をフィールド名とするフィールドを有する。Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドは、従業員を一意に識別する情報（例えば、社員番号等）を値とする。ｎａｍｅフィールドは、従業員の氏名を値とする。
【００２８】
同図において、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、ｅｍｌｏｙｅｅｓフィールドを介して、複数のＥｍｐｌｏｙｅｅオブジェクトを参照している。すなわち、ＤｅｐａｒｔｍｅｎｔオブジェクトとＥｍｐｌｏｙｅｅオブジェクトとは、一対多の参照関係を有することが示されている。このことは、一つの部門に複数の従業員が属することを表現したものである。
【００２９】
なお、本実施の形態において、各オブジェクトが表現する対象（本実施の形態では、部門又は従業員）を一意に識別可能なフィールドを、「識別属性」という。例えば、Ｅｍｐｌｏｙｅｅオブジェクトでは、ｉｄフィールドが識別属性に相当する。
【００３０】
図４に戻る。データストア１６ａは、Ｄｅｐａｒｔｍｅｎｔオブジェクトの永続化先として利用されるデータストアである。データストア１６ｂは、Ｅｍｐｌｏｙｅｅオブジェクトの永続化先として利用されるデータストアである。データストア１６ａは、例えば、ＲＤＢ（Relational Database）であってもよい。データストア１６ｂは、例えば、ＫＶＳ（Key-Value Store）であてもよい。但し、データストア１６ａ及びデータストア１６ｂは、同様の形態のデータストアであってもよい。すなわち、双方がＲＤＢであってもよいし、双方がＫＶＳであってもよい。また、データストア１６ａ及びデータストア１６ｂは、ＲＤＢやＫＶＳ以外の形態のデータストアであってもよい。
【００３１】
Ｏ／Ｒマッパー部１５ａは、Ｄｅｐａｒｔｍｅｎｔオブジェクト（Ｄｅｐａｒｔｍｅｎｔクラス）に関する、オブジェクト関係マッピングの実装である。すなわち、Ｏ／Ｒマッパー部１５ａは、Ｄｅｐａｒｔｍｅｎｔオブジェクトに関して、データストア１６ａのレコードへの変換（永続化）や、データストア１６ａのレコードからの変換等を行う。
【００３２】
Ｏ／Ｒマッパー部１５ｂは、Ｅｍｐｌｏｙｅｅオブジェクト（Ｅｍｐｌｏｙｅｅクラス）に関する、オブジェクト関係マッピングの実装である。すなわち、Ｏ／Ｒマッパー部１５ｂは、Ｅｍｐｌｏｙｅｅオブジェクトに関して、データストア１６ｂのレコードへの変換や、データストア１６ａのレコードからの変換等を行う。
【００３３】
なお、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂは、例えば、オブジェクト関係マッピングの標準仕様であるＪＰＡ（Java（登録商標） Persistence API）及びＪＤＯ（Java（登録商標） Data Objects）等に準拠していてもよい。ＪＰＡに準拠する場合、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂは、ＥｎｔｉｔｙＭａｎａｇｅｒに相当する。
【００３４】
Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂ等の複数のＯ／Ｒマッパー部１５をラッピングし、各オブジェクトの永続化先を各オブジェクトの利用者（本実施の形態では、アプリケーションプログラム１７）から隠蔽する機能を有する。より詳しくは、Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂと同様のＡＰＩ（Application Program Interface）を有し、永続化対象又はデータストア１６からの取得対象のオブジェクトのクラスに応じて、Ｏ／Ｒマッパー部１５ａ又はＯ／Ｒマッパー部１５ｂに、永続化処理又は取得処理を委譲する。
【００３５】
クラス定義ファイル記憶部２１は、アプリケーションプログラム１７から利用される各種のオブジェクトのクラスの定義情報が記録されたファイル（以下、「クラス定義ファイル」という。）を記憶する。クラスの定義情報とは、クラスが有するフィールド及びメソッド等に関する定義を示す情報をいう。すなわち、クラスの定義情報は、当該クラスのインスタンスであるオブジェクトの構造を示す情報であるともいえる。例えば、クラスの定義情報は、クラスのソースコードであってもよいし、Ｊａｖａ（登録商標）バイトコードのように、クラスのソースコードがコンパイルされたものであって、かつ、編集可能なプログラム（例えば、Ｊａｖａ（登録商標）クラスファイル）であってもよい。なお、アプリケーションプログラム１７の機能は、所定のものに限定されない。アプリケーションプログラム１７は、例えば、Ｗｅｂアプリケーションのように、クライアントからの要求に応じて処理を実行するアプリケーションであってもよいし、対話型のアプリケーションであってもよい。
【００３６】
変更対象選択部１１は、クラス定義ファイル記憶部２１に記憶されているクラス定義ファイル群の中から、変更（又は変換）対象とするクラス定義ファイルを選択する。変更対象選択部１１によって選択されたクラス定義ファイルを、以下、「変更対象クラス定義ファイル」という。本実施の形態では、他のクラスのオブジェクトを参照するクラスであって、当該他のクラスと永続化先のデータストア１６が異なるクラスのクラス定義ファイルが、変更対象とされる。本実施の形態では、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルが変更対象クラス定義ファイルとして選択される。なお、「変更」とは、クラス定義ファイルの内容の少なくとも一部を書き換えることをいう。
【００３７】
クラス定義変更部１２は、変更対象クラス定義ファイルに対して変更処理を実行し、変更後クラス定義ファイルｆ１を生成する。より詳しくは、クラス定義変更部１２は、識別属性追加部１２１、参照属性除外部１２２、参照属性設定メソッド変更部１２３、及び参照属性取得メソッド変更部１２４等を含む。
【００３８】
識別属性追加部１２１は、変更対象クラス定義ファイルに係るクラスのオブジェクトから参照されるオブジェクトの識別属性の値を要素とするコレクション型のオブジェクト（以下、「識別要素コレクションオブジェクト」という。）を値とするフィールド（以下、「識別要素コレクションフィールド」という。）の定義を、変更対象クラス定義ファイルに追加する。すなわち、本実施の形態において、識別属性追加部１２１は、Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を要素とする識別要素コレクションフィールドの定義を、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルに対して追加する。
【００３９】
図６は、Ｄｅｐａｒｔｍｅｎｔオブジェクトに識別要素コレクションフィールドが追加された状態を示す図である。
【００４０】
同図において、Ｄｅｐａｒｔｍｅｎｔオブジェクトには、「ｅｍｐｌｏｙｅｅｓＩｄｓ」をフィールド名とするフィールドが追加されている。ｅｍｐｌｏｙｅｅｓＩｄｓフィールドが、識別要素コレクションフィールドである。ｅｍｐｌｏｙｅｅｓＩｄｓフィールドに設定（代入）される識別要素コレクションオブジェクトには、参照要素コレクションフィールドであるｅｍｐｏｅｅｓフィールドの要素であるＥｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値の集合が格納される。
【００４１】
識別属性追加部１２１は、また、識別要素コレクションフィールドに関するｓｅｔｔｅｒとｇｅｔｔｅｒとを変更対象クラス定義ファイルに追加する。ｓｅｔｔｅｒとは、当該ｓｅｔｔｅｒが対応するフィールドへの値の設定要求を受け付けるメソッドである。ｇｅｔｔｅｒとは、当該ｇｅｔｔｅｒが対応するフィールドの値の取得要求を受け付けるメソッドである。
【００４２】
参照属性除外部１２２は、変更対象クラス定義ファイルに含まれている、参照要素コレクションフィールド（ｅｍｐｌｏｙｅｅｓフィールド）を、オブジェクト関係マッピングの実装（Ｏ／Ｒマッパー部１５ａ）による永続化の対象から除外するための処理を実行する。具体的には、参照属性除外部１２２は、変更対象クラス定義ファイルに含まれている参照要素コレクションフィールドに対して、永続化の対象外であることを示す修飾子（後述される＠Ｔｒａｎｓｉｅｎｔアノテーション）を付加する。なお、＠Ｔｒａｎｓｉｅｎｔアノテーションは、ＪＰＡを用いる場合に有効な修飾子であり、例えば、ＪＤＯを用いる場合には、＠ＮｏｔＰｅｒｓｉｓｔｅｎｔが当該修飾子として付加されればよい。
【００４３】
参照要素コレクションフィールドが、永続化対象から除外されるのは、オブジェクト関係マッピングの参照整合性制約によるエラーの発生を回避するためである。すなわち、本実施の形態において、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、データストア１６ａに永続化され、Ｅｍｐｌｏｙｅｅオブジェクトは、データストア１６ｂに永続化される。このような状況において、Ｄｅｐａｒｔｍｅｎｔオブジェクトの参照要素コレクションフィールドであるｅｍｐｌｏｙｅｅｓフィールドが、Ｏ／Ｒマッパー部１５ａによってそのままデータストア１６ａに永続化される場合を考える。この場合、ｅｍｐｌｏｙｅｅｓフィールドによって参照される各Ｅｍｐｌｏｙｅｅオブジェクトは、上記参照整合性制約によって、データストア１６ａに存在することが要求される。しかし、Ｅｍｐｌｏｙｅｅオブジェクトは、データストア１６ａには永続化されないため、上記参照整合性制約を満たすことができない。その結果、Ｄｅｐａｒｔｍｅｎｔオブジェクトの永続化はエラーとなってしまう。斯かる事態の発生を回避するため、参照要素コレクションフィールドは、永続化対象から除外されるのである。
【００４４】
参照要素コレクションフィールドが永続化対象から除外される代わりに、Ｄｅｐａｒｔｍｅｎｔオブジェクトが参照する各Ｅｍｐｌｏｙｅｅオブジェクトの識別属性の値を要素とする識別要素コレクションフィールドが、永続化される。その結果、ＤｅｐａｒｔｍｅｎｔオブジェクトとＥｍｐｌｏｙｅｅオブジェクトとの参照関係が、双方のオブジェクトの永続化によって失われてしまうことを回避することができる。後述されるように、永続化される識別要素コレクションフィールドに基づいて、永続後の各Ｄｅｐａｒｔｍｅｎｔオブジェクトの参照先であるＥｍｐｌｏｙｅｅオブジェクトを特定することができるからである。
【００４５】
なお、識別要素コレクションフィールドがＯ／Ｒマッパー部１５ａを介してデータストア１６ａに永続化されたとしても、参照整合性制約によるエラーは発生しない。識別要素コレクションフィールドの要素は、参照ではなく、文字列又は数値等の一般的なデータ型の値である。したがって、Ｏ／Ｒマッパー部１５ａやデータストア１６ａは、識別要素コレクションフィールドを、単なる文字列又は数値等の集合として扱うからである。
【００４６】
参照属性設定メソッド変更部１２３は、変更対象クラス定義ファイルにおける、参照要素コレクションフィールドのｓｅｔｔｅｒの定義内容に関して変更を行う。すなわち、本実施の形態において、参照属性設定メソッド変更部１２３は、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドに関するｓｅｔｔｅｒの定義内容に関して変更を行う。具体的には、参照属性設定メソッド変更部１２３は、例えば、図７に示されるような状態のＤｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトに関して、図８に示されるような参照関係が形成されるように、当該ｓｅｔｔｅｒの定義内容を変更する。
【００４７】
図７は、参照要素コレクションフィールドのｓｅｔｔｅｒの呼び出し前のＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【００４８】
同図におけるＤｅｐａｒｔｍｅｎｔオブジェクトにおいて、ｅｍｐｌｏｙｅｅｓフィールド及びｅｍｐｌｏｙｅｅｓＩｄｓフィールドの値は空である。例えば、Ｄｅｐａｒｔｍｅｎｔオブジェクトが生成された直後の状態を想定するとよい。
【００４９】
このような状態において、Ｄｅｐａｒｔｍｅｎｔオブジェクトの参照要素コレクションフィールド（ｅｍｐｌｏｙｅｅｓフィールド）のｓｅｔｔｅｒの引数に、同図に示される指定される参照要素コレクションオブジェクトが指定されると、変更後のｓｅｔｔｅｒは、図８に示されるような状態を生成する。
【００５０】
図８は、参照要素コレクションフィールドのｓｅｔｔｅｒの呼び出し後のＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【００５１】
変更後のｓｅｔｔｅｒは、呼び出しに応じ、連動コレクションオブジェクトの生成を連動コレクションオブジェクト生成部１３に実行させる。同図に示されるように、連動コレクションオブジェクトは、「ｖａｌｓ」又は「ｉｄｓ」をフィールド名とするフィールドを有する。ｖａｌｓフィールドには、当該ｓｅｔｔｅｒの引数に指定された参照要素コレクションオブジェクトへの参照が設定される。また、ｉｄｓフィールドには、参照要素コレクションオブジェクトから参照されている各Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を要素とする識別要素コレクションオブジェクトへの参照が設定される。当該識別要素コレクションオブジェクトへの参照は、ＤｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓＩｄｓフィールドにも設定される。更に、連動コレクションオブジェクトへの参照が、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドに設定される。以上の結果、図８に示されるような、参照関係が形成される。
【００５２】
参照属性取得メソッド変更部１２４は、変更対象クラス定義ファイルにおける、参照要素コレクションフィールドのｇｅｔｔｅｒの定義内容に関して変更を行う。すなわち、本実施の形態において、参照属性取得メソッド変更部１２４は、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドに関するｇｅｔｔｅｒの定義内容に関して変更を行う。具体的には、参照属性取得メソッド変更部１２４は、当該ｇｅｔｔｅｒについて、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されている場合には、当該連動コレクションオブジェクトへの参照を返却するように定義内容を変更する。ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されている場合とは、例えば、Ｄｅｐａｒｔｍｅｎｔオブジェクトが、図８に示されるような状態を有する場合である。
【００５３】
また、参照属性取得メソッド変更部１２４は、当該ｇｅｔｔｅｒについて、ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されていない場合は、次のような処理を実行するように定義内容を変更する。
【００５４】
図９は、ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されていないＤｅｐａｒｔｍｅｎｔオブジェクトの状態を示す図である。
【００５５】
同図のＤｅｐａｒｔｍｅｎｔオブジェクトにおいて、ｅｍｐｌｏｙｅｅｓフィールドの値は空である。一方、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドには、識別要素コレクションオブジェクトへの参照が設定されている。例えば、同図は、データストア１６ａに永続化されていたＤｅｐａｒｔｍｅｎｔオブジェクトが、データストア１６ａより取得された直後の状態を示す。
【００５６】
Ｄｅｐａｒｔｍｅｎｔオブジェクトが図９に示される状態である場合、変更後のｇｅｔｔｅｒ内では、識別要素コレクションオブジェクトに含まれている各数値オブジェクトをキーとして、Ｅｍｐｌｏｙｅｅオブジェクト群が、Ｏ／Ｒマッパー部１５ｂを介してデータストア１６ｂより取得される。更に、取得されたＥｍｐｌｏｙｅｅオブジェクトを要素とする参照要素コレクションオブジェクトが生成される。また、連動コレクションオブジェクトが生成され、当該連動コレクションオブジェクトのｖａｌｓフィールドに、当該参照要素コレクションオブジェクトへの参照が設定される。また、当該連動コレクションオブジェクトのｉｄｓフィールドには、図９に示される識別要素コレクションオブジェクトへの参照が設定される。また、当該連動コレクションオブジェクトへの参照が、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドに設定される。その結果、変更後のｇｅｔｔｅｒの呼び出しに応じ、図８において説明した状態が生成される。なお、変更後のｇｅｔｔｅｒは、ｅｍｐｌｏｙｅｅｓフィールドの値、すなわち、連動コレクションオブジェクトへの参照を、返却する。
【００５７】
後述されるように、連動コレクションオブジェクトは、参照要素コレクションオブジェクトと同じインタフェース（Ｌｉｓｔインタフェース）を実装する。したがって、当該ｇｅｔｔｅｒの呼び出し元のアプリケーションプログラム１７は、返却された連動コレクションオブジェクトを参照要素コレクションオブジェクトとして扱う。このことは、変更対象クラス定義ファイルの変更に関して、アプリケーションプログラム１７のソースコード等は影響を受けないことを意味する。
【００５８】
例えば、アプリケーションプログラム１７は、連動コレクションオブジェクトに対して、Ｅｍｐｌｏｙｅｅオブジェクトの取得、追加、又は削除を要求する。斯かる要求に応じて、連動コレクションオブジェクトは、次のように振る舞う。
【００５９】
図１０は、連動コレクションオブジェクトを説明するための図である。同図に示されるように、連動コレクションオブジェクトは、Ｅｍｐｌｏｙｅｅオブジェクトの取得、追加、又は削除の要求に応じた処理を、ｖａｌｓフィールドに設定されている参照要素コレクションオブジェクトに委譲する。したがって、参照要素コレクションオブジェクトにおいて、Ｅｍｐｌｏｙｅｅオブジェクトの取得、追加、又は削除が実行される。連動コレクションオブジェクトは、更に、参照要素コレクションオブジェクトにおけるＥｍｐｌｏｙｅｅオブジェクトの追加又は削除を、ｉｄｓフィールドに設定されている識別要素コレクションオブジェクトに反映する。具体的には、連動コレクションオブジェクトは、追加対象のＥｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を、当該識別要素コレクションオブジェクトに追加する。また、連動コレクションオブジェクトは、削除対象のＥｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を、当該識別要素コレクションオブジェクトより削除する。
【００６０】
連動コレクションオブジェクトに上記のような処理を実行させるために、例えば、連動コレクションオブジェクトのクラス（連動コレクションクラス）は、図１１に示されるように定義される。
【００６１】
図１１は、連動コレクションクラスの定義例を示す図である。同図では、連動コレクションクラスのクラス名は、「ＭｅｔａＬｉｓｔ」である例が示されている。
【００６２】
同図において、記述３１６は、ＭｅｔａＬｉｓｔクラス（連動コレクションクラス）が、コレクション型の一例であるＬｉｓｔインタフェースを実装することを示す。なお、後述されるように、参照要素コレクションオブジェクトも、Ｌｉｓｔインタフェースを実装する。
【００６３】
記述ｄ３１１は、ｖａｌｓフィールドの定義である。記述ｄ３１２は、ｉｄｓフィールドの定義である。記述ｄ３１３は、ｉｄｓフィールドのｇｅｔｔｅｒである、ｇｅｔＩｄｓメソッドの定義である。なお、ｉｄｓフィールドのｓｅｔｔｅｒ、並びにｖａｌｓフィールドのｇｅｔｔｅｒ及びｓｅｔｔｅｒに関する定義は、便宜上省略されている。
【００６４】
記述ｄ３１４は、Ｌｉｓｔインタフェースにおいて定義されているａｄｄメソッドの実装である。ａｄｄメソッドは、引数に指定される、ＭｅｔａＥｎｔｉｔｙインタフェースを実装するクラスのオブジェクトの追加要求に応じた処理を実行する。ＭｅｔａＬｉｓｔクラスのａｄｄメソッドには、識別要素コレクションオブジェクト及び参照要素コレクションオブジェクトのそれぞれへの要素の追加処理が定義されている。
【００６５】
記述ｄ３１５は、Ｌｉｓｔインタフェースにおいて定義されているｒｅｍｏｖｅメソッドの実装である。ＭｅｔａＬｉｓｔクラスのｒｅｍｏｖｅメソッドは、引数に指定される、ＭｅｔａＥｎｔｉｔｙインタフェースを実装するクラスのオブジェクトの削除要求に応じた処理を実行する。ＭｅｔａＬｉｓｔクラスのｒｅｍｏｖｅメソッドには、識別要素コレクションオブジェクト及び参照要素コレクションオブジェクトのそれぞれからの要素の削除処理が定義されている。
【００６６】
なお、本実施の形態では、Ｅｍｐｌｏｙｅｅオブジェクトが、ａｄｄメソッド及びｒｅｍｏｖｅメソッド等の引数に指定される。すなわち、Ｅｍｐｌｏｙｅｅクラスは、ＭｅｔａＥｎｔｉｔｙインタフェースを実装する。
【００６７】
このように、連動コレクションオブジェクトは、参照要素コレクションオブジェクトと、識別要素コレクションオブジェクトとの状態を連動又は同期させ、その結果として、双方の間に常に整合性が確保されるようする。
【００６８】
連動コレクションオブジェクトの導入意義又は存在意義の一つは、例えば、次の通りである。
【００６９】
オブジェクト指向プログラムにおいて、或るオブジェクトのフィールドの値は、ローカル変数（一時的に利用可能なデータ格納域）等に代表される左辺値に代入することが可能である。このような性質は、コレクションオブジェクトへの参照を値とするフィールドに関しても同様である。
【００７０】
したがって、例えば、Ｄｅｐａｒｔｍｅｎｔオブジェクトが図６に示されるような状態において、ｅｍｐｌｏｅｅｓフィールドに関する変更前のｇｅｔｔｅｒの呼び出されたとする。この場合、ｅｍｐｌｏｅｅｓフィールドに設定されている参照要素コレクションオブジェクトへの参照が、ｇｅｔｔｅｒの呼び出し元のアプリケーションプログラム１７のローカル変数に代入される可能性がある。そして、アプリケーションプログラム１７によって、当該ローカル変数を介して、参照要素コレクションフィールドへのＥｍｐｌｏｙｅｅオブジェクトの追加又は削除等が実行される可能性がある。
【００７１】
しかしながら、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、当該ローカル変数を介した参照要素コレクションフィールドへのＥｍｐｌｏｙｅｅオブジェクトの追加又は削除を検知することはできない。当該ローカル変数は、Ｄｅｐａｒｔｍｅｎｔオブジェクトとは関係を有さないからである。したがって、参照要素コレクションフィールドに追加されたＥｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値は、識別要素コレクションフィールドには追加されない。その結果、参照要素コレクションフィールドと識別要素コレクションフィールドとの間に不整合が発生してしまう。
【００７２】
上記したように、参照要素コレクションフィールドと識別要素コレクションフィールドとのうち、永続化の対象とされるのは、識別要素コレクションフィールドのみである。そうすると、参照要素コレクションフィールドに対する変更が、正しく永続化されないことになってしまう。すなわち、一般的に「ダーティチェック」と呼ばれる機能を有効に作用させることができなくなってしまう。ダーティチェックとは、メモリ上におけるオブジェクト間の参照関係と、データストアにおいて永続化されているレコード間の参照関係との間の差分を自動的に検出し、当該差分をデータストアに反映する機能をいう。
【００７３】
一方、Ｄｅｐａｒｔｍｅｎｔオブジェクトが、図８に示されるような状態であれば、ｅｍｐｌｏｅｅｓフィールドに関する変更後のｇｅｔｔｅｒの呼び出しによって、連動コレクションオブジェクトへの参照が、ｇｅｔｔｅｒの呼び出し元のアプリケーションプログラム１７のローカル変数に代入される。そして、当該ローカル変数を介したＥｍｐｌｏｙｅｅオブジェクトの追加又は削除等は、図１０において説明したように、連動コレクションオブジェクトによって、参照要素コレクションオブジェクト及び識別要素コレクションオブジェクトの双方に反映される。その結果、ダーティチェックを有効に作用させることができる。
【００７４】
このような理由から、本実施の形態では、連動コレクションオブジェクトが導入されているのである。
【００７５】
以下、情報処理装置１０が実行する処理手順について説明する。図１２は、変更対象クラス定義ファイルの選択処理の処理手順の一例を説明するためのフローチャートである。
【００７６】
ステップＳ１０１において、変更対象選択部１１は、クラス定義ファイル記憶部２１に記憶されているクラス定義ファイル群の中から一つのクラス定義ファイルを選択して当該クラス定義ファイルを読み込む。選択されたクラス定義ファイルに係るクラスを、以下「対象クラス」という。例えば、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルが選択された場合、図１３に示される定義情報が読み込まれる。
【００７７】
図１３は、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。
【００７８】
同図に示されるクラス定義ファイルＣ１において、記述ｄ１１１は、ｉｄフィールドの定義である。記述ｄ１１２は、ｉｄフィールドのｇｅｔｔｅｒである、ｇｅｔＩｄメソッドの定義である。記述ｄ１１３は、ｉｄフィールドのｓｅｔｔｅｒである、ｓｅｔＩｄメソッドの定義である。
【００７９】
記述ｄ１１４は、参照要素コレクションフィールドである、ｅｍｐｌｏｙｅｅｓフィールドの定義である。すなわち、ｅｍｐｌｏｙｅｅｓフィールドは、Ｅｍｐｌｏｙｅｅオブジェクトへの参照を要素とするＬｉｓｔ型のフィールドである。なお、Ｌｉｓｔ型とは、コレクション型の一種である。記述ｄ１１５は、ｅｍｐｌｏｙｅｅｓフィールドのｇｅｔｔｅｒである、ｇｅｔＥｍｐｌｏｙｅｅｓメソッドの定義である。記述ｄ１１６は、ｅｍｐｌｏｙｅｅｓフィールドのｓｅｔｔｅｒである、ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの定義である。記述ｄ１１７は、ＭｅｔａＥｎｔｉｔｙインタフェースにおいて定義されている、ｇｅｔＰｒｉｍａｒｙＫｅｙメソッドに対する実装である。すなわち、記述ｄ１１８において、Ｄｅｐａｒｔｍｅｎｔクラスは、ＪＰＡで定義されているＭｅｔａＥｎｔｉｔｙインタフェースを実装することが示されている。したがって、Ｄｅｐａｒｔｍｅｎｔクラスは、ＭｅｔａＥｎｔｉｔｙインタフェースで定義されているメソッドの実装を含むのである。なお、ｇｅｔＰｒｉｍａｒｙＫｅｙメソッドは、プライマリキー（すなわち、オブジェクトごとに一意な識別属性の値）を返却するメソッドである。したがって、Ｄｅｐａｒｍｅｎｔクラスにおいて実装されたｇｅｔＰｒｉｍａｒｙＫｅｙメソッドでは、ｉｄフィールドの値が返却される。
【００８０】
また、Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルが選択された場合、図１４に示される定義情報が読み込まれる。
【００８１】
図１４は、Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルの定義例を示す図である。
【００８２】
同図に示されるクラス定義ファイルＣ２において、記述ｄ２１１は、ｉｄフィールドの定義である。記述ｄ２１２は、ｉｄフィールドのｇｅｔｔｅｒである、ｇｅｔＩｄメソッドの定義である。記述ｄ２１３は、ｉｄフィールドのｓｅｔｔｅｒである、ｓｅｔＩｄメソッドの定義である。記述ｄ２１４は、ＭｅｔａＥｎｔｉｔｙインタフェースにおいて定義されている、ｇｅｔＰｒｉｍａｒｙＫｅｙメソッドに対する実装である。すなわち、記述ｄ２１５において、Ｅｍｐｌｏｙｅｅクラスは、ＭｅｔａＥｎｔｉｔｙインタフェースを実装することが示されている。したがって、Ｅｍｐｌｏｙｅｅクラスは、ＭｅｔａＥｎｔｉｔｙインタフェースで定義されているメソッドの実装を含むのである。Ｅｍｐｌｏｙｅｅクラスにおいて実装されたｇｅｔＰｒｉｍａｒｙＫｅｙメソッドでは、ｉｄフィールドの値が返却される。
【００８３】
続いて、変更対象選択部１１は、対象クラス定義ファイルには、オブジェクトへの参照を要素とするコレクション型のフィールド（参照要素コレクションフィールド）が有るか否かを判定する（Ｓ１０２）。当該判定は、例えば、＠ＯｎｅＴｏＭａｎｙアノテーションが付加されているフィールドの有無に基づいて行われる。すなわち、＠ＯｎＴｏＭａｎｙアノテーションは、当該アノテーションが付加されたフィールドが一対多の参照関係を保持するためのフィールドであることを示す修飾子である。
【００８４】
図１３に示される、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルＣ１には、記述ｄ１１４において＠ＯｎＴｏＭａｎｙアノテーションが含まれている。したがって、クラス定義ファイルＣ１が対象クラス定義ファイルである場合、ステップＳ１０２の判定はＹｅｓとなる。
【００８５】
一方、図１４に示される、Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルＣ２には、＠ＯｎＴｏＭａｎｙアノテーションは含まれていない。したがって、クラス定義ファイルＣ２が対象クラス定義ファイルである場合、ステップＳ１０２の判定はＮｏとなる。
【００８６】
なお、＠ＯｎＴｏＭａｎｙアノテーションの有無ではなく、コレクション型のフィールドであって、コレクションの要素が他のクラスのオブジェクトへの参照であるフィールドの有無に基づいてステップＳ１０２の判定が行われてもよい。
【００８７】
すなわち、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルＣ１（図１３）の記述ｄ１１４には、Ｅｍｐｌｏｙｅｅクラスのオブジェクトへの参照を要素とするコレクション型（Ｌｉｓｔ型）のｅｍｐｌｏｅｅｓフィールドが含まれている。したがって、クラス定義ファイルＣ１に関して、ステップＳ１０２の判定はＹｅｓとなる。
【００８８】
一方、Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルＣ２（図１４）には、参照を要素とするコレクション型のフィールドは含まれていない。したがって、クラス定義ファイルＣ２に関して、ステップＳ１０２の判定はＮｏとなる。
【００８９】
対象クラス定義ファイルに参照要素コレクションフィールドが有る場合（Ｓ１０２でＹｅｓ）、変更対象選択部１１は、対象クラス定義ファイルに係るクラス（以下、「対象クラス」という。）のオブジェクトの永続化先と、当該参照要素コレクションフィールドにおいて参照先として指定されているクラス（以下、「参照先クラス」という。）のオブジェクトの永続化先とが異なるか否かを判定する（Ｓ１０３）。当該判定は、オブジェクト配置定義記憶部２２を参照して行われる。
【００９０】
図１５は、オブジェクト配置定義記憶部の構成例を示す図である。同図において、オブジェクト配置定義記憶部２２は、永続化対象とされるオブジェクトのクラスごとに、クラス名、Ｏ／ＲマッパーＩＤ、及び永続化ユニット名等を記憶する。クラス名は、永続化対象とされるオブジェクトのクラスの名前である。Ｏ／ＲマッパーＩＤは、各クラスのオブジェクトの永続化等を実行するＯ／Ｒマッパー部１５の識別子である。本実施の形態では、Ｄｅｐａｒｔｍｅｎｔクラスのオブジェクトは、Ｏ／Ｒマッパー部１５ａによって永続化される。Ｅｍｐｌｏｙｅｅクラスのオブジェクトは、Ｏ／Ｒマッパー部１５ｂによって永続化される。したがって、Ｄｅｐａｒｔｍｅｎｔクラスに対しては、Ｏ／Ｒマッパー部１５ａのＯ／ＲマッパーＩＤが記憶され、Ｅｍｐｌｏｙｅｅクラスに対しては、Ｏ／Ｒマッパー部１５ｂのＯ／ＲマッパーＩＤが記憶されている。永続化ユニット名は、永続化ユニットの名前である。永続化ユニットとは、ＪＰＡにおいて、Ｏ／Ｒマッパー部１５に対する設定情報が記述されたファイルをいう。例えば、各Ｏ／Ｒマッパー部１５は、永続化ユニットに記述された設定情報に基づいて、永続化先のデータストア１６の識別等を行う。
【００９１】
オブジェクト配置定義記憶部２２において、Ｏ／ＲマッパーＩＤが異なるということは、永続化先が異なるということになる。したがって、上記したステップＳ１０３において、変更対象選択部１１は、対象クラスに対応するＯ／ＲマッパーＩＤと、参照先クラスに対応するＯ／ＲマッパーＩＤとが異なるか否かに基づいて、双方のクラスのオブジェクトの永続化先の異同を判定する。
【００９２】
例えば、対象クラスがＤｅｐａｒｔｍｅｎｔクラスの場合、クラス定義ファイルＣ１（図１３）の記述ｄ１１４より、参照先クラスはＥｍｐｌｏｙｅｅクラスである。そして、図１５に示されるオブジェクト配置定義記憶部２２において、Ｄｅｐａｒｔｍｅｎｔクラスに対するＯ／ＲマッパーＩＤと、Ｅｍｐｌｏｙｅｅクラスに対するＯ／ＲマッパーＩＤとは異なる。したがって、対象クラスのオブジェクトの永続化先と、参照先クラスのオブジェクトの永続化先とは異なると判定される。
【００９３】
対象クラスのオブジェクトの永続化先と、参照先クラスのオブジェクトの永続化先とが異なる場合（Ｓ１０３でＹｅｓ）、変更対象選択部１１は、対象クラス定義ファイルを、変更対象であると判定する（Ｓ１０４）。すなわち、対象クラス定義ファイルは、変更対象クラス定義ファイルとして選択される。具体的には、対象クラス定義ファイルが、変更対象クラス定義ファイルが格納されるべき所定のフォルダにコピーされてもよい。または、変更対象選択部１１が、対象クラス定義ファイルに関する変更処理の実行を、クラス定義変更部１２に要求してもよい。
【００９４】
一方、対象クラスのオブジェクトの永続化先と、参照先クラスのオブジェクトの永続化先とが同じである場合（Ｓ１０３でＮｏ）、変更対象選択部１１は、対象クラス定義ファイルは、変更対象ではないと判定する。この場合、対象クラスのオブジェクトと参照先クラスのオブジェクトとは、単一のデータストア１６に永続化され、参照整合性制約に違反することはないからである。
【００９５】
なお、図１２の処理は、クラス定義ファイル記憶部２１に記憶されている各クラス定義ファイルについて実行される。したがって、複数のクラス定義ファイルが変更対象クラス定義ファイルとして選択される可能性も有る。
【００９６】
続いて、変更対象クラス定義ファイルの変更処理について説明する。図１６は、変更対象クラス定義ファイルの変更処理の処理手順の一例を説明するためのシーケンス図である。同図の処理は、図１２の処理と同期的に実行されてもよいし、図１２の処理と非同期に実行されてもよい。例えば、図１２のステップＳ１０４において、変更対象選択部１１からクラス定義変更部１２に対して変更処理の実行が要求される場合、図１６の処理は、そのときの対象クラス定義ファイルを処理対象として図１２の処理と同期的に実行される。一方、図１２のステップＳ１０４において、変更対象クラス定義ファイルが、所定のフォルダにコピーされる場合、図１６の処理は、当該フォルダにコピーされた一以上の変更対象クラス定義ファイルに関してバッチ的に実行されてもよい。
【００９７】
いずれの場合であっても、図１６の処理は、変更対象クラス定義ファイルのロード時に実行されてもよい。変更対象クラス定義ファイルのロード時とは、変更対象クラス定義ファイルに定義されたクラスを利用する、アプリケーションプログラム１７が起動されるときをいう。なお、Ｊａｖａ（登録商標）であれば、Ｊａｖａ（登録商標）クラスファイルがクラス定義ファイルの一例である。Ｊａｖａ（登録商標）クラスファイルの内容は、Ｊａｖａ（登録商標）コンパイラによってコンパイルされたバイトコードであるが、コードインジェクション機構等を利用して、ロード時に書き換え可能である。コードインジェクション機構とは、Ｊａｖａ（登録商標）クラスファイルを入力とし、オリジナルのプログラムとは異なるプログラムを挿入したり、ロジックを変更したり、フィールド又はメソッド等のプログラム要素にアノテーションを追加したりできる機構である。
【００９８】
ステップＳ１１１において、クラス定義変更部１２は、一つの変更対象クラス定義ファイルに対する変更処理を、識別属性追加部１２１に要求する。ここでは、Ｄｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルＣ１が変更処理の対象とされた場合を例とする。続いて、識別属性追加部１２１は、例えば、コードインジェクション機構を用いて、変更対象クラス定義ファイルにおける参照要素コレクションフィールドに対応する識別要素コレクションフィールドを、変更対象クラス定義ファイルに追加する（Ｓ１１２）。この際、識別属性追加部１２１は、当該識別要素コレクションフィールドのｓｅｔｔｅｒ及びｇｅｔｔｅｒの定義も、変更対象クラス定義ファイルに追加する。
【００９９】
図１７は、識別要素コレクションフィールドの追加後のＤｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。図１７中、図１３と同一部分には同一符号を付し、その説明は省略する。
【０１００】
図１７中、記述ｄ１２１、記述ｄ１２２、及び記述ｄ１２３が、ステップＳ１１２において追加される部分である。すなわち、記述ｄ１２１に示されるｅｍｐｌｏｙｅｅｓＩｄｓフィールドは、記述ｄ１１４に示されるｅｍｐｌｏｙｅｅｓフィールドに対応する識別要素コレクションフィールドである。記述ｄ１２２に示されるｇｅｔＥｍｐｌｏｙｅｅｓＩｄｓメソッドは、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドのｇｅｔｔｅｒである。記述ｄ１２２に示されるｓｅｔＥｍｐｌｏｙｅｅｓＩｄｓメソッドは、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドのｓｅｔｔｅｒである。
【０１０１】
なお、ｅｍｐｌｏｙｅｅｓＩｄフィールドの要素の型は、Ｓｔｒｉｎｇ型（文字列型）とされている。これは、参照先であるＥｍｐｌｏｙｅｅクラスの識別属性の型が、Ｓｔｒｉｎｇ型であるからである。Ｅｍｐｌｏｙｅｅクラスのフィールドのうち、いずれのフィールドが識別属性であるかは、＠Ｉｄアノテーションに基づいて判定される。すなわち、＠Ｉｄアノテーションが付加されているフィールドが、識別属性のフィールドであると判定される。Ｅｍｐｌｏｙｅｅクラスのクラス定義ファイルＣ２（図１４）では、記述ｄ２１１におけるｉｄフィールドに＠Ｉｄアノテーションが付加されている。したがって、ｉｄフィールドが識別属性であると判定される。また、ｉｄフィールドの型は、Ｓｔｒｉｎｇ型である。したがって、ｅｍｐｌｏｙｅｅｓＩｄフィールドの要素の型は、Ｓｔｒｉｎｇ型とされる。
【０１０２】
なお、仮に、図１７に示される定義情報に基づいて生成されるＤｅｐａｒｔｍｅｎｔオブジェクトは、図６に示されるような参照関係を形成する。
【０１０３】
続いて、クラス定義変更部１２は、参照属性除外部１２２に対して、変更対象クラス定義ファイルに対する変更処理の実行を要求する（Ｓ１１３）。参照属性除外部１２２は、例えば、コードインジェクション機構を用いて、変更対象クラス定義ファイルにおける参照要素コレクションフィールドを永続化対象から除外するための定義を、変更対象クラス定義ファイルに追加する（Ｓ１１４）。
【０１０４】
続いて、クラス定義変更部１２は、参照属性設定メソッド変更部１２３に対して、変更対象クラス定義ファイルに対する変更処理の実行を要求する（Ｓ１１５）。参照属性設定メソッド変更部１２３は、例えば、コードインジェクション機構を用いて、変更対象クラス定義ファイルにおける、参照要素コレクションフィールドのｓｅｔｔｅｒの定義内容に関して変更を行う（Ｓ１１６）。すなわち、参照要素コレクションフィールドと、識別要素コレクションフィールドとの整合性が保持されるようにするための処理が参照要素コレクションフィールドのｓｅｔｔｅｒに追加される。
【０１０５】
続いて、クラス定義変更部１２は、参照属性取得メソッド変更部１２４に対して、変更対象クラス定義ファイルに対する変更処理の実行を要求する（Ｓ１１７）。参照属性取得メソッド変更部１２４は、例えば、コードインジェクション機構を用いて、変更対象クラス定義ファイルにおける、参照要素コレクションフィールドのｇｅｔｔｅｒの定義内容に関して変更を行う（Ｓ１１８）。すなわち、参照要素コレクションフィールドと、識別要素コレクションフィールドとの整合性が保持されるようにするための処理が参照要素コレクションフィールドのｇｅｔｔｅｒに追加される。
【０１０６】
図１８は、参照要素コレクションフィールドに関して変更が行われた後のＤｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルの定義例を示す図である。同図のクラス定義ファイルＣ１は、図１７に示されるクラス定義ファイルＣ１に対して、ステップＳ１１３〜Ｓ１１８が実行された結果を示す。図１８中、図１７と同一部分には同一符号を付し、その説明は省略する。
【０１０７】
図１８では、図１７における記述ｄ１１４、記述ｄ１１５、記述ｄ１１６のそれぞれが、記述ｄ１１４ａ、記述ｄ１１５ａ、記述ｄ１１６ａに変更されている。
【０１０８】
すなわち、記述ｄ１１４ａには、ステップＳ１１４の実行によって、＠Ｔｒａｎｓｉｅｎｔアノテーションが付加されている。＠Ｔｒａｎｓｉｅｎｔアノテーションは、当該アノテーションが付加されたフィールドを永続化対象から除外することを示す修飾子である。すなわち、Ｏ／Ｒマッパー部１５ａやＯ／Ｒマッパー部１５ｂは、オブジェクトを永続化する際、＠Ｔｒａｎｓｉｅｎｔアノテーションが付加されたフィールドを永続化対象から除外する。
【０１０９】
また、記述ｄ１１６ａには、ステップＳ１１６の実行によって、下線部分が追加されている。下線部分には、図７に示される参照関係を、図８に示される参照関係に変更するための処理手順が記述されている。
【０１１０】
更に、記述ｄ１１５ａには、ステップＳ１１８の実行によって、下線部分が追加されている。下線部分には、ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されている場合に、当該連動コレクションオブジェクトへの参照を返却するための処理手順が記述されている。ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されている場合とは、図８に示される参照関係が形成されている場合をいう。また、当該下線部分には、ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されていない場合に、図８に示される参照関係を形成して連動コレクションオブジェクトへの参照を返却するための処理手順が記述されている。なお、ｅｍｐｌｏｙｅｅｓフィールドに連動コレクションオブジェクトへの参照が設定されていない場合とは、Ｄｅｐａｒｔｍｅｎｔオブジェクトが、図９に示される状態を有する場合である。
【０１１１】
以上でＤｅｐａｒｔｍｅｎｔクラスのクラス定義ファイルＣ１の変更処理は終了する。すなわち、図１８に示されるクラス定義ファイルＣ１は、本実施の形態において、Ｄｅｐａｒｔｍｅｎｔクラスに関する変更後クラス定義ファイルｆ１である。以下、図１８に示されるクラス定義ファイルＣ１を、「変更後クラス定義ファイルｆ１」という。
【０１１２】
続いて、変更後クラス定義ファイルｆ１に基づいて生成されるオブジェクの永続化時に実行される処理手順について説明する。
【０１１３】
図１９及び図２０は、オブジェクトの永続化時の処理手順の一例を説明するためのシーケンス図である。図１９及び図２０は、オブジェクトの永続化が行われる一つのシナリオに関する処理手順を説明するものであり、オブジェクトの永続化が常に当該処理手順によって実行されることを示すものではない。
【０１１４】
ステップＳ２０１において、アプリケーションプログラム１７は、例えば、参照要素コレクションオブジェクトを生成する。当該参照要素コレクションオブジェクトは、例えば、アプリケーションプログラム１７のローカル変数によってその参照が保持される。続いて、アプリケーションプログラム１７は、一以上のＥｍｐｌｏｙｅｅオブジェクトを生成する（Ｓ２０２）。当該Ｅｍｐｌｏｙｅｅオブジェクトは、図１４に示されるラス定義ファイルＣ２の定義情報に基づいて生成される。
【０１１５】
続いて、アプリケーションプログラム１７は、ステップＳ２０２において生成されたＥｍｐｌｏｙｅｅオブジェクトへの参照を、ステップＳ２０１において生成された参照要素コレクションオブジェクトの要素として追加する。続いて、アプリケーションプログラム１７は、Ｄｅｐａｒｔｍｅｎｔオブジェクトを生成する（Ｓ２０４）。当該Ｄｐａｒｔｍｅｎｔブジェクトは、変更後クラス定義ファイルｆ１（図１８）の定義情報に基づいて生成される。
【０１１６】
続いて、アプリケーションプログラム１７は、Ｄｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓフィールドのｓｅｔｔｅｒである、ｓｅｔＥｍｐｌｏｙｅｅｓメソッドを呼び出す（Ｓ２０５）。ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの引数には、参照要素コレクションオブジェクトが指定される。
【０１１７】
続いて、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、呼び出されたｓｅｔＥｍｐｌｏｙｅｅｓメソッド内において、図１８の記述ｄ１１６ａに定義された処理を実行する。すなわち、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、連動コレクションオブジェクトの生成を、連動コレクションオブジェクト生成部１３に要求する（Ｓ２０６）。当該要求には、ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの引数に指定された参照要素コレクションオブジェクトが指定される。
【０１１８】
続いて、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトを生成する（Ｓ２０７）。続いて、連動コレクションオブジェクト生成部１３は、識別要素コレクションオブジェクトを生成する（Ｓ２０８）。この時点において、生成された各オブジェクトの状態は、例えば、図２１に示される通りである。
【０１１９】
図２１は、各オブジェクトの状態の例を示す第一の図である。同図に示されるように、ステップＳ２０８の直後においては、Ｄｅｐａｒｔｍｅｎｔオブジェクト、参照要素コレクションオブジェクト、Ｅｍｐｌｏｙｅｅオブジェクト、連動コレクションオブジェクト、及び識別要素コレクションオブジェクトが生成されている。各Ｅｍｐｌｏｙｅｅオブジェクトは、参照要素コレクションオブジェクトの要素として追加されている。したがって、参照要素コレクションオブジェクトは、各Ｅｍｐｌｏｙｅｅオブジェクトを参照している。他のオブジェクト間には参照関係は形成されていない。また、識別要素コレクションオブジェクトには、要素は追加されていない。
【０１２０】
続いて、連動コレクションオブジェクト生成部１３は、参照要素コレクションオブジェクトの要素である各Ｅｍｐｌｏｙｅｅオブジェクトから、ｉｄフィールドの値（識別属性の値）を取得する（Ｓ２０９）。続いて、連動コレクションオブジェクト生成部１３は、取得された各ｉｄフィールドの値を、識別要素コレクションオブジェクトに追加する（Ｓ２１０）。その結果、各オブジェクトの状態は、例えば、図２２に示されるようになる。
【０１２１】
図２２は、各オブジェクトの状態の例を示す第二の図である。同図に示されるように、ステップＳ２１０が実行されることにより、識別要素コレクションオブジェクトには、各Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値が要素として追加されている。
【０１２２】
続いて、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトのｖａｌｓフィールドに、参照要素コレクションオブジェクトへの参照を設定（代入）する。また、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトのｉｄｓフィールドに、識別要素コレクションオブジェクトへの参照を設定（代入）する（Ｓ２１１）。その結果、各オブジェクトの状態は、例えば、図２３に示されるようになる。
【０１２３】
図２３は、各オブジェクトの状態の例を示す第三の図である。同図に示されるように、ステップＳ２１１の実行により、連動コレクションオブジェクトから識別要素コレクションオブジェクト及び参照要素コレクションオブジェクトへの参照関係が形成されている。なお、図２３に示される状態で、連動コレクションオブジェクトへの参照が、ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの戻り値として、連動コレクションオブジェクト生成部１３からＤｅｐａｒｔｍｅｎｔオブジェクトへ返却される。
【０１２４】
続いて、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、参照要素コレクションフィールドであるｅｍｐｌｏｙｅｅｓフィールドに、連動コレクションオブジェクトへの参照を代入する。また、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、識別要素コレクションフィールドであるｅｍｐｌｏｙｅｅｓＩｄｓフィールドに、連動コレクションオブジェクトのｖａｌｓフィールドの値、すなわち、識別要素コレクションオブジェクトへの参照を代入する（Ｓ２１２）。その結果、各オブジェクトの状態は、図８において説明した通りとなる。
【０１２５】
以上で、ステップＳ２０５において呼び出された、ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの処理は終了する。すなわち、ステップＳ２０５〜Ｓ２１２までが、図１８の記述ｄ１１６ａに定義された処理である。ｓｅｔＥｍｐｌｏｙｅｅｓメソッドの処理の終了結果、処理の制御は、アプリケーションプログラム１７に復帰する。
【０１２６】
続いて、アプリケーションプログラム１７は、Ｏ／Ｒマッパーアクセス部１４に、トランザクションの開始を要求する（図２０：Ｓ２１３）。当該トランザクションは、Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクト等をデータストア１６ａ又はデータストア１６ｂに永続化するためのトランザクションである。
【０１２７】
続いて、Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂのそれぞれに、トランザクションの開始を要求する（Ｓ２１４、Ｓ２１５）。続いて、アプリケーションプログラム１７は、Ｏ／Ｒマッパーアクセス部１４に、各Ｅｍｐｌｏｙｅｅオブジェクトの永続化を要求する（Ｓ２１６）。Ｏ／Ｒマッパーアクセス部１４は、例えば、オブジェクト配置定義記憶部２２を参照して、Ｅｍｐｌｏｙｅｅオブジェクトに対応するＯ／Ｒマッパー部１５はＯ／Ｒマッパー部１５ｂであると判定する。そこで、Ｏ／Ｒマッパーアクセス部１４は、各Ｅｍｐｌｏｙｅｅオブジェクトの永続化をＯ／Ｒマッパー部１５ｂに要求する（Ｓ２１７）。
【０１２８】
続いて、アプリケーションプログラム１７は、Ｏ／Ｒマッパーアクセス部１４に、Ｄｅｐａｒｔｍｅｎｔオブジェクトの永続化を要求する（Ｓ２１８）。Ｏ／Ｒマッパーアクセス部１４は、例えば、オブジェクト配置定義記憶部２２を参照して、Ｄｅｐａｒｔｍｅｎｔオブジェクトに対応するＯ／Ｒマッパー部１５はＯ／Ｒマッパー部１５ａであると判定する。そこで、Ｏ／Ｒマッパーアクセス部１４は、Ｄｅｐａｒｔｍｅｎｔオブジェクトの永続化をＯ／Ｒマッパー部１５ａに要求する（Ｓ２１７）。
【０１２９】
続いて、アプリケーションプログラム１７は、トランザクションのコミット（トランザクションの内容のデータストア１６への反映）をＯ／Ｒマッパーアクセス部１４に要求する（Ｓ２２０）。Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂのそれぞれに対し、にトランザクションのコミットを要求する（Ｓ２２１、Ｓ２２２）。その結果、Ｏ／Ｒマッパー部１５ｂによって、各Ｅｍｐｌｏｙｅｅオブジェクトは、データストア１６ｂのレコードに変換されて永続化される。また、Ｏ／Ｒマッパー部１５ａによって、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、データストア１６ａのレコードに変換されて永続化される。但し、Ｄｅｐａｒｔｍｅｎｔオブジェクトの参照要素コレクションフィールドであるｅｍｐｌｏｙｅｅｓフィールドは、変更後クラス定義ファイルｆ１（図１８）の記述ｄ１１４ａの＠Ｔｒａｎｓｉｅｎｔアノテーションに基づいて、永続化対象から除外される。
【０１３０】
ステップＳ２２２の実行直後において、各データストア１６ａには、例えば、図２４に示されるように、Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトが永続化される。
【０１３１】
図２４は、Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトの永続化状態の例を示す図である。
【０１３２】
同図において、データストア１６ｂには、図５に示される状態の各Ｅｍｐｌｏｙｅｅオブジェクトが永続化された例が示されている。すなわち、二つのＥｍｐｌｏｙｅｅオブジェクトのそれぞれに対応するレコードが、データストア１６ｂのレコードに生成されている。また、二つのＥｍｐｌｏｙｅｅオブジェクトのｉｄフィールド及びｎａｍｅフィールドの値が、各レコードの項目の値として永続化されている。
【０１３３】
また、データストア１６ａには、図５に示される状態のＤｅｐａｒｔｍｅｎｔオブジェクトが永続化された例が示されている。すなわち、当該Ｄｅｐａｒｔｍｅｎｔオブジェクトに対応するレコードが、データストア１６ａに生成されている。また、当該Ｄｅｐａｒｔｍｅｎｔオブジェクトのｉｄフィールド及びｅｍｐｌｏｙｅｅｓＩｄｓフィールドの値が、当該レコードの項目として永続化されている。なお、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドについては、識別要素コレクションオブジェクトの要素である各文字列オブジェクト値が、永続化されている。
【０１３４】
Ｏ／Ｒマッパー部１５ａやデータストア１６ａから見た場合、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドの値は、単なる文字列の集合であり、他のオブジェクトへの参照としての意味を有さない。また、上記したように、参照要素コレクションフィールドであるｅｍｐｌｏｅｅｓフィールドは、永続化の対象とはされない。したがって、参照整合性制約に違反することなく、かつ、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドの値によってＥｍｐｌｏｙｅｅオブジェクトへの参照関係が維持されたまま、Ｄｅｐａｒｔｍｅｎｔオブジェクトを永続化することができる。
【０１３５】
続いて、永続化されているオブジェクトの取得時に実行される処理手順について説明する。
【０１３６】
図２５〜図２７は、永続化されているオブジェクトの取得時の処理手順の一例を説明するためのシーケンス図である。図２５〜図２７は、オブジェクトの取得が行われる一つのシナリオに関する処理手順を説明するものであり、オブジェクトの取得が常に当該処理手順によって実行されることを示すものではない。
【０１３７】
ステップＳ３０１において、アプリケーションプログラム１７は、トランザクションの開始をＯ／Ｒマッパーアクセス部１４に要求する。当該トランザクションは、Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクト等をデータストア１６ａ又はデータストア１６ｂより取得するためのトランザクションである。
【０１３８】
続いて、Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂのそれぞれに、トランザクションの開始を要求する（Ｓ３０２、Ｓ３０３）。
【０１３９】
続いて、アプリケーションプログラム１７は、Ｄｅｐａｒｔｍｅｎｔオブジェクトの取得をＯ／Ｒマッパーアクセス部１４に要求する（Ｓ３０４）。当該要求には、取得対象のＤｅｐａｒｔｍｅｎｔオブジェクトを特定するための情報として、ｉｄフィールドの値が指定される。例えば、ｉｄフィールドの値が”人事部”であるＤｅｐａｒｔｍｅｎｔオブジェクトの取得が要求される。
【０１４０】
Ｏ／Ｒマッパーアクセス部１４は、例えば、オブジェクト配置定義記憶部２２を参照して、Ｄｅｐａｒｔｍｅｎｔオブジェクトに対応するＯ／Ｒマッパー部１５はＯ／Ｒマッパー部１５ａであると判定する。そこで、Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａに、ｉｄフィールドの値が”人事部”であるＤｅｐａｒｔｍｅｎｔオブジェクトの取得を要求する（Ｓ３０５）。
【０１４１】
続いて、Ｏ／Ｒマッパー部１５ａは、ｉｄ項目の値が”人事部”であるレコードをデータストア１６ａより検索し、当該レコード（図２４）に基づいて、ｉｄフィールドの値が”人事部”であるＤｅｐａｒｔｍｅｎｔオブジェクトを生成する（Ｓ３０６）。続いて、Ｏ／Ｒマッパー部１５ａは、当該レコードのｅｍｐｌｏｙｅｅｓＩｄｓ項目の値を格納するための識別要素コレクションオブジェクトを生成する（Ｓ３０７）。続いて、Ｏ／Ｒマッパー部１５ａは、当該レコードのｅｍｐｌｏｙｅｅｓＩｄｓ項目に記憶されている各文字列に対応する文字列オブジェクトを、当該ＤｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅｓＩｄｓフィールドの要素として追加する（Ｓ３０８）。なお、ステップＳ３０８の実行直後のＤｅｐａｒｔｍｅｎｔオブジェクトの状態は、例えば、図９に示した通りである。図９に示される状態のＤｅｐａｒｔｍｅｎｔオブジェクトが、Ｏ／Ｒマッパーアクセス部１４を介して、アプリケーションプログラム１７に返却される。その結果、処理の制御は、アプリケーションプログラム１７に復帰する。
【０１４２】
続いて、アプリケーションプログラム１７が、当該ＤｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅＩｄｓフィールドに関するｇｅｔｔｅｒである、ｇｅｔＥｍｐｌｏｙｅｅｓを呼び出したとする（図２６：Ｓ３０９）。Ｄｅｐａｒｔｍｅｎｔオブジェクトは、呼び出されたｇｅｔＥｍｐｌｏｙｅｅｓメソッド内において、図１８の記述ｄ１１５ａに定義された処理を実行する。
【０１４３】
すなわち、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、連動コレクションオブジェクトの生成を連動コレクションオブジェクト生成部１３に要求する（Ｓ３１０）。当該要求には、ｅｍｐｌｏｙｅｅｓＩｄｓフィールドに設定されている識別要素コレクションオブジェクトへの参照が引数として指定される。
【０１４４】
続いて、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトを生成する（Ｓ３１１）。続いて、連動コレクションオブジェクト生成部１３は、参照要素コレクションオブジェクトを生成する（Ｓ３１２）。続いて、連動コレクションオブジェクト生成部１３は、引数に指定された識別要素コレクションオブジェクトの各要素である文字列（すなわち、Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値）を取得する（Ｓ３１３）。
【０１４５】
続いて、連動コレクションオブジェクト生成部１３は、取得された文字列をｉｄフィールドの値とするＥｍｐｌｏｙｅｅオブジェクトの取得を、Ｏ／Ｒマッパーアクセス部１４に要求する（Ｓ３１４）。Ｏ／Ｒマッパーアクセス部１４は、例えば、オブジェクト配置定義記憶部２２を参照して、Ｅｍｐｌｏｙｅｅオブジェクトに対応するＯ／Ｒマッパー部１５はＯ／Ｒマッパー部１５ｂであると判定する。そこで、Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ｂに、当該文字列をｉｄフィールドの値とするＥｍｐｌｏｙｅｅオブジェクトの取得を要求する（Ｓ３１５）。
【０１４６】
続いて、Ｏ／Ｒマッパー部１５ｂは、ｉｄ項目の値が当該文字列と一致するレコードをデータストア１６ｂより検索し、当該レコード（図２４）に基づいて、ｉｄフィールドの値が当該文字列であるＥｍｐｌｏｙｅｅオブジェクトを生成する（Ｓ３１６）。なお、ステップＳ３１４〜Ｓ３１６は、ステップＳ３１３において取得された文字列の数だけ実行される。その結果、当該文字列の数だけＥｍｐｌｏｙｅｅオブジェクトが生成される。
【０１４７】
続いて、連動コレクションオブジェクト生成部１３は、生成された各Ｅｍｐｌｏｙｅｅオブジェクトを、参照要素コレクションオブジェクトの要素として追加する（Ｓ３１７）。この時点で、各オブジェクトの状態は、例えば、図２８に示されるようになる。
【０１４８】
図２８は、各オブジェクトの状態の例を示す第四の図である。同図に示されるように、図２５の処理によって取得されたＤｅｐａｒｔｍｅｎｔオブジェクトに加え、連動コレクションオブジェクト、参照要素コレクションオブジェクトが生成されている。また、各Ｅｍｐｌｏｙｅｅオブジェクが、データストア１６ｂより取得され、参照要素コレクションオブジェクトの要素とされている。
【０１４９】
なお、連動コレクションオブジェクト生成部１３は、ステップＳ３１４のタイミングで、データストア１６ｂからのＥｍｐｌｏｙｅｅオブジェクトの取得をおこなわなくてもよい。その後に連動コレクションオブジェクトに対してＥｍｐｌｏｙｅｅオブジェクトの取得が要求された際に、データストア１６ｂからＥｍｐｌｏｙｅｅオブジェクトが取得されてもよい。
【０１５０】
続いて、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトのｖａｌｓフィールドに、参照要素コレクションオブジェクトへの参照を代入する。また、連動コレクションオブジェクト生成部１３は、連動コレクションオブジェクトのｉｄｓフィールドに、識別要素コレクションオブジェクトへの参照を代入する（Ｓ３１８）。その結果、各オブジェクトの状態は、例えば、図２９に示されるようになる。
【０１５１】
図２９は、各オブジェクトの状態の例を示す第五の図である。同図に示されるように、ステップＳ３１８の実行により、連動コレクションオブジェクトから識別要素コレクションオブジェクト及び参照要素コレクションオブジェクトへの参照関係が形成されている。なお、図２９に示される状態で、連動コレクションオブジェクトへの参照が、連動コレクションオブジェクト生成部１３からＤｅｐａｒｔｍｅｎｔオブジェクトへ返却される。
【０１５２】
続いて、Ｄｅｐａｒｔｍｅｎｔオブジェクトは、参照要素コレクションフィールドであるｅｍｐｌｏｙｅｅｓフィールドに、連動コレクションオブジェクトへの参照を代入する（Ｓ３１９）。その結果、各オブジェクトの状態は、図８において説明した通りとなる。なお、図８に示される状態の連動コレクションオブジェクトへの参照が、ステップＳ３０９において呼び出されたｇｅｔＥｍｐｌｏｙｅｅｓの戻り値として、アプリケーションプログラム１７に返却される。すなわち、ステップＳ３１０〜Ｓ３１９までが、図１８の記述１１５ａに定義された処理である。
【０１５３】
続いて、アプリケーションプログラム１７は、トランザクションのコミットをＯ／Ｒマッパーアクセス部１４に要求する（Ｓ３２０）。Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂのそれぞれに対し、にトランザクションのコミットを要求する（Ｓ３２１、Ｓ３２２）。
【０１５４】
このように、Ｄｅｐａｒｔｍｅｎｔオブジェクトの参照要素コレクションフィールドが永続化の対象から除外されたとしても、識別要素コレクションフィールドに基づいて、ＤｅｐａｒｔｍｅｎｔオブジェクトとＥｍｐｌｏｙｅｅオブジェクトとの参照関係を復元することができる。
【０１５５】
続いて、ダーティチェック時に実行される処理手順について説明する。ダーティチェック時に実行される処理手順とは、Ｄｅｐａｒｔｍｅｎｔオブジェクト又はＥｍｐｌｏｙｅｅオブジェクトに対する変更内容がデータストア１６ａ又はデータストア１６ｂへ反映される際に実行される処理手順である。
【０１５６】
図３０及び図３１は、ダーティチェック時に実行される処理手順の一例を説明するためのシーケンス図である。図３０及び図３１は、ダーティチェックが行われる一つのシナリオに関する処理手順を説明するものであり、ダーティチェックが常に当該処理手順によって実行されることを示すものではない。なお、図３０に示される処理手順の前に、図２５及び図２６において説明した処理手順（Ｓ３０１〜Ｓ３１９）が実行され、図８に示される状態の連動レコクションオブジェクトがアプリケーションプログラム１７に返却されていることとする。
【０１５７】
ステップＳ３１９に続いて、アプリケーションプログラム１７は、ＤｅｐａｒｔｍｅｎｔオブジェクトのｇｅｔＥｍｐｌｏｙｅｅｓメソッドの戻り値として返却された連動コレクションオブジェクトを、ローカル変数に代入する（Ｓ４２０）。その結果、図８に示される各オブジェクトの状態は、図３２に示されるものへ変化する。
【０１５８】
図３２は、各オブジェクトの状態の例を示す第六の図である。同図では、連動コレクションオブジェクトへの参照が、ローカル変数に代入されている状態が示されている。
【０１５９】
なお、アプリケーションプログラム１７（の開発者）は、ｇｅｔＥｍｐｌｏｙｅｅｓメソッドの戻り値が連動コレクションオブジェクトであることは意識していない。すなわち、ｇｅｔＥｍｐｌｏｙｅｅｓメソッドは、Ｄｅｐａｒｔｍｅｎｔオブジェクトにおける参照要素コレクションフィールドのｇｅｔｔｅｒである。したがって、アプリケーションプログラム１７（の開発者）は、ｇｅｔＥｍｐｌｏｙｅｅｓメソッドの戻り値を、参照要素コレクションオブジェクトへの参照として扱う。
【０１６０】
続いて、アプリケーションプログラム１７は、Ｅｍｐｌｏｙｅｅオブジェクトを新たに生成する（Ｓ４２１）。続いて、アプリケーションプログラム１７は、生成されたＥｍｐｌｏｙｅｅオブジェクトへの参照が代入されたローカル変数を指定して、連動コレクションオブジェクトに対して当該Ｅｍｐｌｏｙｅｅオブジェクトの追加を要求する（Ｓ４２２）。
【０１６１】
続いて、連動コレクションオブジェクトは、追加要求に指定されたローカル変数に格納されているＥｍｐｌｏｙｅｅオブジェクトへの参照を、当該連動コレクションオブジェクトのｖａｌｓフィールドに設定されている参照要素コレクションオブジェクトの要素として追加する（Ｓ４２３）。続いて、連動コレクションオブジェクトは、当該Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を、当該連動コレクションオブジェクトのｉｄｓフィールドに設定されている識別要素コレクションオブジェクトの要素として追加する（Ｓ４２４）。
【０１６２】
上記の処理の結果、各オブジェクトの状態は、図３２に示されるものから図３３に示されるものへと変化する。
【０１６３】
図３３は、各オブジェクトの状態の例を示す第七の図である。同図では、参照要素コレクションオブジェクトの要素に、新たに生成された、ｉｄフィールドの値が「５００」であるＥｍｐｌｏｙｅｅオブジェクトへの参照が追加されている。また、当該Ｅｍｐｌｏｙｅｅオブジェクトのｉｄフィールドの値を示す文字列オブジェクトが、識別要素コレクションオブジェクトの要素として追加されている。その結果、参照要素コレクションオブジェクトと識別要素コレクションオブジェクトとの整合性が維持されている。
【０１６４】
続いて、アプリケーションプログラム１７は、新たに生成されたＥｍｐｌｏｙｅｅオブジェクトの永続化をＯ／Ｒマッパーアクセス部１４に要求する（図３１：Ｓ４２５）。Ｏ／Ｒマッパーアクセス部１４は、例えば、オブジェクト配置定義記憶部２２を参照して、Ｅｍｐｌｏｙｅｅオブジェクトに対応するＯ／Ｒマッパー部１５はＯ／Ｒマッパー部１５ｂであると判定する。そこで、Ｏ／Ｒマッパーアクセス部１４は、当該Ｅｍｐｌｏｙｅｅオブジェクトの永続化をＯ／Ｒマッパー部１５ｂに要求する（Ｓ４２６）。
【０１６５】
続いて、アプリケーションプログラム１７は、トランザクションのコミットをＯ／Ｒマッパーアクセス部１４に要求する（Ｓ４２７）。Ｏ／Ｒマッパーアクセス部１４は、Ｏ／Ｒマッパー部１５ａ及びＯ／Ｒマッパー部１５ｂのそれぞれに対し、にトランザクションのコミットを要求する（Ｓ４２８、Ｓ４３０）。
【０１６６】
この際、Ｏ／Ｒマッパー部１５ａによるコミットの実行時に、ＤｅｐａｒｔｍｅｎｔオブジェクトのｅｍｐｌｏｙｅｅＩｄｓフィールドに関して、データストア１６ａの内容との差分が検出される。すなわち、ｅｍｐｌｏｙｅｅＩｄｓフィールドに設定されている識別要素コレクションオブジェクトに新たに追加されたｉｄフィールドの値（「５００」）が、差分として検出される。そこで、Ｏ／Ｒマッパー部１５ａは、当該差分をデータストア１６ａに反映させる。すなわち、データストア１６ａにおいて、ｉｄ項目の値が”人事部”であるレコードのｅｍｐｌｏｙｅｅｓＩｄｓ項目に、当該差分である値（「５００」）が追加される。Ｏ／Ｒマッパー部１５ａによるこのような処理は、ダーティチェックと呼ばれるＯ／Ｒマッパー部１５の標準的な機能で実現可能である。
【０１６７】
その結果、Ｄｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトの永続化状態は、例えば、図２４に示されるものから図３４に示されるものへ変化する。
【０１６８】
図３４は、ダーティチェック後のＤｅｐａｒｔｍｅｎｔオブジェクト及びＥｍｐｌｏｙｅｅオブジェクトの永続化状態の例を示す図である。
【０１６９】
同図では、データストア１６ａにおける、ｉｄの値が”人事部”であるＤｅｐａｒｔｍｅｎｔオブジェクト対応するレコードのｅｍｐｌｏｙｅｅｓＩｄｓ項目に対して、”５００”が追加されている。また、データストア１６ｂに、ｉｄ項目の値が”５００”であるＥｍｐｌｏｙｅｅオブジェクトに対応するレコードが追加されている。
【０１７０】
このように、本実施の形態では、参照要素コレクションオブジェクトの代わりに連動コレクションオブジェクトをアプリケーションプログラム１７の操作対象とすることにより、参照要素コレクションオブジェクトと識別要素コレクションオブジェクトとの整合性を維持することができる。その結果、ダーティチェックを有効に機能させることができる。
【０１７１】
なお、本実施の形態では、便宜上、ＤｅｐａｒｔｍｅｎｔオブジェクトからＥｍｐｌｏｙｅｅオブジェクトへの片方向の一対多の参照関係に関して説明したが、本実施の形態は、双方向の一対多の参照関係、又は双方向の多対多の参照関係に関しても適用可能である。
【０１７２】
上述したように、本実施の形態によれば、片方向一対多、双方向1対多、又は双方向多対多等の参照関係を有し、相互に永続化先が異なるオブジェクト群について、参照整合性制約に違反することなく、かつ、当該参照関係を維持した状態で、永続化を行うことができる。換言すれば、オブジェクト間の参照関係を複数のデータストアに跨って永続化することができる。
【０１７３】
また、参照先のクラス（例えば、Ｅｍｐｌｏｙｅｅクラス）のオブジェクトを参照する参照元のクラス（例えば、Ｄｅｐａｒｔｍｅｎｔクラス）の参照要素コレクションフィールドのｓｅｔｔｅｒに関して、参照要素コレクションフィールドと識別要素コレクションフィールドとの整合性が維持されるようにクラス定義ファイルが自動的に変更される。したがって、当該ｓｅｔｔｅｒの呼び出しに応じて、参照要素コレクションフィールドと識別要素コレクションフィールドとの間に不整合が発生するのを回避することができる。
【０１７４】
また、参照要素コレクションフィールドと識別要素コレクションフィールドとの整合性を維持するために連動コレクションオブジェクトが導入され、参照要素コレクションフィールドのｇｅｔｔｅｒでは、連動コレクションオブジェクトが返却される。そして、連動コレクションオブジェクトは、参照元のオブジェクト参照要素コレクションオブジェクトと、識別要素コレクションオブジェクトとを参照する。このことは、連動コレクションオブジェクトは、実質的に、参照元のオブジェクトの参照コレクションフィールド及び識別要素コレクションフィールドを参照することを意味する。更に、連動コレクションオブジェクトは、参照要素コレクションオブジェクトと同じインタフェース（Ｌｉｓｔインタフェース）を実装し、当該インタフェースを介したオブジェクトの追加又は削除等を、参照元のオブジェクトの参照要素コレクションオブジェクト及び識別要素コレクションオブジェクトに反映する。すなわち、当該インタフェースを介したオブジェクトの追加又は削除等は、参照元のオブジェクトの参照要素コレクションフィールド及び識別要素コレクションフィールドに反映される。したがって、当該参照要素コレクションフィールドのｇｅｔｔｅｒの戻り値がローカル変数等に代入された場合であっても、当該ローカル変数を介して行われる参照要素コレクションオブジェクトに関する変更要求を、参照元のオブジェクトの参照要素コレクションフィールド及び子識別要素コレクションフィールドの双方に反映させることができる。
【０１７５】
なお、本実施の形態において、連動コレクションオブジェクトへの参照は、参照元のオブジェクト（Ｄｅｐａｒｔｍｅｎｔオブジェクト）の参照要素コレクションフィールドに設定（代入）される例を示した。しかし、連動コレクションオブジェクトへの参照は、必ずしも参照要素コレクションフィールドに設定されなくてもよい。例えば、連動コレクションオブジェクトへの参照が設定されるフィールド（以下、「連動コレクションフィールド」という。）が、参照元のオブジェクトのクラスに別途追加されてもよい。この場合、参照要素コレクションフィールドのｇｅｔｔｅｒ内においては、連動コレクションフィールドに設定されている連動コレクションオブジェクトを返却するようにすればよい。
【０１７６】
但し、連動コレクションフィールドを設ける場合、クラス定義ファイルの変更に関して、連動コレクションフィールドを追加する処理が必要とされる。また、参照要素コレクションフィールに加えて、連動コレクションフィールドも永続化対象から除去するようにする必要がある。すなわち、クラス定義ファイルに対する変更箇所が増加するという不都合がある。また、連動コレクションフィールドのデータサイズ分だけオブジェクトのデータサイズが大きくなってしまうというという不都合もある。
【０１７７】
一方、本実施の形態のように、参照要素コレクションフィールドに連動コレクションオブジェクトへの参照が設定される形態では、上記のような不都合はない。したがって、このような点において、参照要素コレクションフィールドに連動コレクションオブジェクトへの参照が設定される形態は、優れているといえる。
【０１７８】
また、本実施の形態によって得られる他の効果として、複数のデータストアを跨いだ参照関係の永続化が可能となることにより、積極的に複数データストアの再構成を行なえることが挙げられる。したがって、各々の構成のパフォーマンスを計測し、最適な構成を発見するための作業が容易になることが期待できる。
【０１７９】
また、ＫＶＳのように、本来であれば参照関係を管理できない非関係データストアであっても、ＲＤＢ等の関係データストアのように使用することができるといった、非関係データストアの適用範囲の拡大への貢献も期待できる。
【０１８０】
なお、本実施の形態において、Ｄｅｐａｒｔｍｅｎｔクラスは、第一のクラスの一例である。Ｅｍｐｌｏｙｅｅクラスは、第二のクラスの一例である。クラス定義ファイルは、第一のクラスの定義情報の一例である。参照属性除外部１２２は、除外部の一例である。識別属性追加部１２１は、追加部の一例である。参照属性設定メソッド変更部１２３は、第一の変更部の一例である。参照属性取得メソッド変更部１２４は、第二の変更部の一例である。連動コレクションオブジェクトは、連動オブジェクトの一例である。
【０１８１】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１８２】
以上の説明に関し、更に以下の項を開示する。
（付記１）
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更する除外部と、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加する追加部と、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更する第一の変更部と、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する第二の変更部とを有する情報処理装置。
（付記２）
前記第一の変更部は、前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合と当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合とを、前記連動オブジェクトに参照させ、前記連動オブジェクトを前記第一の属性に設定するように前記定義情報を変更し、
前記連動オブジェクトは、前記第一の属性に対する変更要求に応じ、当該連動オブジェクトが参照する前記第二のクラスのオブジェクトの集合及び前記識別属性の値の集合を変更する付記１記載の情報処理装置。
（付記３）
前記第二の変更部は、前記第一の属性の取得要求に応じた処理について、前記第一の属性に前記連動オブジェクトが設定されている場合は、当該連動オブジェクトを返却し、前記第一の属性に前記連動オブジェクトが設定されていない場合は、前記第二の属性に設定されている前記識別属性の値の集合に対応する前記第二のクラスのオブジェクトの集合を永続化先より取得し、取得された該集合を前記連動オブジェクトに参照させ、該連動オブジェクトを返却するように、前記定義情報を変更する付記２記載の情報処理装置。
（付記４）
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更し、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加し、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更し、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する処理をコンピュータが実行する情報処理方法。
（付記５）
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について変更する処理は、当該集合と当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合とを、前記連動オブジェクトに参照させ、前記連動オブジェクトを前記第一の属性に設定するように前記定義情報を変更し、
前記連動オブジェクトは、前記第一の属性に対する変更要求に応じ、当該連動オブジェクトが参照する前記第二のクラスのオブジェクトの集合及び前記識別属性の値の集合を変更する付記４記載の情報処理方法。
（付記６）
前記第一の属性の取得要求に応じた処理について変更する処理は、前記第一の属性に前記連動オブジェクトが設定されている場合は、当該連動オブジェクトを返却し、前記第一の属性に前記連動オブジェクトが設定されていない場合は、前記第二の属性に設定されている前記識別属性の値の集合に対応する前記第二のクラスのオブジェクトの集合を永続化先より取得し、取得された該集合を前記連動オブジェクトに参照させ、該連動オブジェクトを返却するように、前記定義情報を変更する付記５記載の情報処理方法。
（付記７）
第一のクラスの属性のうち、第二のクラスのオブジェクトの集合である第一の属性が、永続化対象から除外されるように前記第一のクラスの定義情報を変更し、
前記第二のクラスのオブジェクトの識別属性の値の集合である第二の属性を前記定義情報に追加し、
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について、当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合を前記第二の属性に設定するように、前記定義情報を変更し、
前記第一の属性の取得要求に応じた処理について、前記第一の属性に対する変更要求を前記第一の属性及び前記第二の属性に反映させる連動オブジェクトを返却するように、前記定義情報を変更する処理をコンピュータに実行させるプログラム。
（付記８）
前記第一の属性に対する前記第二のクラスのオブジェクトの集合の設定要求に応じた処理について変更する処理は、当該集合と当該集合に含まれるそれぞれの前記第二のクラスのオブジェクトの前記識別属性の値の集合とを、前記連動オブジェクトに参照させ、前記連動オブジェクトを前記第一の属性に設定するように前記定義情報を変更し、
前記連動オブジェクトは、前記第一の属性に対する変更要求に応じ、当該連動オブジェクトが参照する前記第二のクラスのオブジェクトの集合及び前記識別属性の値の集合を変更する付記７記載のプログラム。
（付記９）
前記第一の属性の取得要求に応じた処理について変更する処理は、前記第一の属性に前記連動オブジェクトが設定されている場合は、当該連動オブジェクトを返却し、前記第一の属性に前記連動オブジェクトが設定されていない場合は、前記第二の属性に設定されている前記識別属性の値の集合に対応する前記第二のクラスのオブジェクトの集合を永続化先より取得し、取得された該集合を前記連動オブジェクトに参照させ、該連動オブジェクトを返却するように、前記定義情報を変更する付記８記載のプログラム。
【符号の説明】
【０１８３】
１０          情報処理装置
１１          変更対象選択部
１２          クラス定義変更部
１３          連動コレクションオブジェクト生成部
１４          Ｏ／Ｒマッパーアクセス部
１５ａ        Ｏ／Ｒマッパー部
１５ｂ        Ｏ／Ｒマッパー部
１６ａ        データストア
１６ｂ        データストア
２１          クラス定義ファイル記憶部
２２          オブジェクト配置定義記憶部
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１２１        識別属性追加部
１２２        参照属性除外部
１２３        参照属性設定メソッド変更部
１２４        参照属性取得メソッド変更部
Ｂ            バス
【図１】
0005673431.tif 000002
【図２】
0005673431.tif 000003
【図３】
0005673431.tif 000004
【図４】
0005673431.tif 000005
【図５】
0005673431.tif 000006
【図６】
0005673431.tif 000007
【図７】
0005673431.tif 000008
【図８】
0005673431.tif 000009
【図９】
0005673431.tif 000010
【図１０】
0005673431.tif 000011
【図１１】
0005673431.tif 000012
【図１２】
0005673431.tif 000013
【図１３】
0005673431.tif 000014
【図１４】
0005673431.tif 000015
【図１５】
0005673431.tif 000016
【図１６】
0005673431.tif 000017
【図１７】
0005673431.tif 000018
【図１８】
0005673431.tif 000019
【図１９】
0005673431.tif 000020
【図２０】
0005673431.tif 000021
【図２１】
0005673431.tif 000022
【図２２】
0005673431.tif 000023
【図２３】
0005673431.tif 000024
【図２４】
0005673431.tif 000025
【図２５】
0005673431.tif 000026
【図２６】
0005673431.tif 000027
【図２７】
0005673431.tif 000028
【図２８】
0005673431.tif 000029
【図２９】
0005673431.tif 000030
【図３０】
0005673431.tif 000031
【図３１】
0005673431.tif 000032
【図３２】
0005673431.tif 000033
【図３３】
0005673431.tif 000034
【図３４】
0005673431.tif 000035