JPA機能を使用する場合、以下に注意してください。
Java Persistence Entity間のrelationshipの一貫性は、自動的に管理されません。例えば、双方向のrelationshipでは、一方でrelationshipフィールドを更新すると、もう一方のEntityのrelationshipフィールドもアプリケーションが更新する必要があります。
Entityは、Java EE 6コンポーネントではないので、Entity内でDependency Injectionは使用できません。
Interstage永続性プロバイダが内部的に自動生成したSQL文を実行する場合、識別子には大文字/小文字を区別するダブルコーテーションなどは付与されません。例えば、カラム名に"id"や"name"を指定した場合、以下のようなSQL文が実行されます。
select id, name from employee
この場合、識別子が大文字/小文字のどちらで扱われるかについては、データベースの仕様により異なります。
このため、以下のように設定することをお勧めします。
Oracle、JavaDB、Symfoware ServerのNativeインタフェース、HA Database Ready SX1のNative SQL、SQL Serverの場合、マッピング対象のテーブル名とカラム名を大文字に統一することを推奨します。(またはデフォルト設定を利用)
Symfoware ServerのOpenインタフェース、PowerGres Plus、HA Database Ready SX1のOpen SQLの場合、マッピング対象のテーブル名とカラム名を小文字に統一することを推奨します。
以下のいずれかの条件にあてはまる場合、アプリケーションの配備時にJPAがデータベースへ接続を行います。
以下の条件を満たす場合
deployment descriptor (persistence.xml)の<persistence-unit>に<jta-data-source>、または<non-jta-data-source>を指定している。かつ、
アプリケーション内で@PersistenceUnitを使用しEntityManagerFactoryインスタンスを取得している。
プライマリキー値の自動生成機能を使用している場合
上記条件を満たす場合、アプリケーションをIJServerクラスタ、またはInterstage Java EE 6 DASサービスへ配備する前にJDBCドライバの環境設定を行ってください。
詳細は「4.14.1 JDBCドライバの環境設定」を参照してください。
なお、Interstage永続性プロバイダを使用する場合、以下にも注意してください。
サポートされるデータベースは「F.3 データベース関連」を参照してください。
Entityの永続化フィールドについては、Java Persistence API規約による使用可能なJava型以外は動作が保証できません。
Entity間の継続関係のマッピング方針については、SINGLE_TABLEオプションまたはJOINEDオプションは使用できますが、TABLE_PER_CLASSオプションは使用できません。
Native Queryでデータベースを検索する場合、Interstage永続性プロバイダが検索結果をオブジェクトとしてカプセル化する時に、エンティティクラスの属性とテーブルのカラム名の大文字/小文字が一致していないためエラーが発生する可能性があります。この場合、eclipselink.jpa.uppercase-column-namesをtrueに設定してください。
DBMSの制限により使用できない機能があります。使用できない機能を使おうとすると、DBMSの仕様による例外メッセージと発行されたSQL文が出力されます。DBMSのマニュアルを参照し、必要に応じてアプリケーションを修正してください。以下に、DBMSの制限により使用できない機能をいくつか記述します。
使用するDBMSがSymfoware ServerのNativeインタフェース、HA Database Ready SX1のNative SQLの場合、以下に注意してください。
以下の関数は、DBMSのバージョンによって使用に制限があります。詳細はDBMSのマニュアルを参照してください。
SQRT関数、MOD関数の使用
LOCATE関数の第3引数の指定、入力パラメタの複数指定
TRIM関数、LENGH関数の入力パラメタの指定
SUBSTRING関数の第1引数の入力パラメタの指定
CONCAT関数の入力パラメタの複数指定
Pessimistic Locking機能のLockNoWaitオプションは使用できません。
プライマリキー値の自動生成機能でTableGeneratorを使用する時、table属性を指定しない場合、デフォルトで「SEQUENCE」を利用します。しかし、table属性に「SEQUENCE」を明示的に指定した場合、「SEQUENCE」がDBMSの予約語のため、プライマリキー自動生成のためのテーブル生成に失敗します。table属性にDBMSの予約語を指定する場合、ダブルコーテーションで囲って指定してください。
使用するDBMSがSQL Serverの場合、以下に注意してください。
TRIM関数の変換文字は指定できません。空白が使用されます。
Pessimistic Locking機能は使用できません。