Entity Beanとリレーショナルデータベースのマッピング
一般的に、Entity Beanのクラスは、リレーショナルデータベースのテーブルに、Entity Beanのインスタンスは、そのテーブル内の行(レコード)に、それぞれマッピングされます。
以下にEntity Beanとリレーショナルデータベースのマッピング例を示します。
オブジェクトの操作とデータベース処理の対応
Entity Beanのオブジェクトを操作することにより、対応するデータベース処理を行うことができます。
以下にオブジェクトの操作とデータベース処理の対応を示します。
オブジェクトの操作 | 対応するデータベース処理 | 発行するデータベース操作文 |
---|---|---|
オブジェクトの生成 | 新しいレコードが追加される | INSERT文 |
オブジェクトの削除 | レコードが削除される | DELETE文 |
オブジェクトの呼出し | レコードの検索または、更新 | SELECT文(検索の場合) |
以下のメソッドを使用して、データベースの操作を行います。
EJBアプリケーションのHomeインタフェースに定義され、単一または複数のEJBアプリケーションに対するリファレンスを取得します。
CMP2.0では戻り値が複数の場合の型は、java.util.Collection型だけサポートされています(java.util.EnumerationはCMP1.1およびBMPではサポートされています)。
EJBアプリケーション内部でだけ使用できるプライベートメソッドです。
ejbSelectメソッドを使用してCMFやCMRフィールドの値や、Local/Remoteインタフェースを取得できます。
ejbHomeメソッドやビジネスメソッドからも呼び出せることにより、finderメソッドよりも柔軟性に優れていますが、HomeインタフェースではなくEnterprise Beanクラスで抽象メソッドとして定義されるので、クライアントには公開されません(クライアントから呼び出すことができません)。
CMP2.0では戻り値が複数の場合の型は、java.util.Collection型だけサポートされています(java.util.Set型は現在未サポートです)。
Entity Beanのインスタンスについては、“27.4 EJBコンテナのチューニング”を参照してください。
CMP2.0の更新データの一貫性保証
CMP2.0 Entity Beanで、同一データに対して複数から更新処理を実行する場合に、データの整合性が保証できず、デッドロックエラーが発生することを抑止するCMP2.0の更新データの一貫性保証機能を使用できます。
デッドロックエラーを抑止するためにデータベースでは、テーブルを検索するSELECT文にFOR UPDATE句を付加して検索した行に更新ロックをかけることで、同一レコードに複数トランザクションからアクセスする場合の検索から更新までのデータの一貫性を保証します。
更新ロックとは、検索処理時に参照した行にロックをかけることで、トランザクション処理が完了するまでデータの一貫性を保証するものです。
更新ロックされた行は、別のトランザクションでは参照できません。
CMP2.0 Entity Bean単位で行の更新ロックを使用すると、コンテナがデータベースに検索処理を実行する以下の処理で、更新ロックがかかります。
finderメソッド
ejbSelectメソッド
CMRへのアクセッサメソッド
CMFのロード
設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “ワークユニット名” > “モジュール名” > “Bean名” > [アプリケーション環境定義]の「CMFマッピング定義」で行います。デフォルトは“しない”です。
詳細はInterstage管理コンソールのヘルプを参照してください。
注意
ejbSelectで実行される集合関数(MAXなど)を使用した検索処理については、FOR UPDATEの使用はデータベースの仕様により禁止されているため、更新ロックはかかりません。
FOR UPDATE句がサポートされていないデータベースを使用して本機能を使用すると、起動時にエラーメッセージが出力され、起動または活性化に失敗します。
FOR UPDATE句については、使用するデータベースのマニュアルを参照してください。
データベースにSymfowareを使用している、および、EJBアプリケーションにrelationshipを設定している場合、本機能を使用すると起動時にエラーメッセージが出力され、起動または活性化に失敗します。
本機能使用時にデッドロックエラーが発生した場合は、“29.9.11 デッドロックが発生する場合”を参照してください。