Interstage永続性プロバイダは以下の処理を実行する場合、Entityの永続化フィールドのデータ型に対応するJDBCのAPI(setメソッド、getメソッド)を実行します。
クエリメソッドの実行結果から値を取得する場合
(ResultSetのgetメソッドを実行する)
永続化フィールドとクエリメソッドのパラメタをSQLクエリの条件に指定する場合
(PrepareStatementのsetメソッドを実行する)
Entityの作成と更新により永続化フィールドの値をSQL文に指定する場合
(PrepareStatementのsetメソッドを実行する)
Javaのデータ型とDBMSのSQLデータ型の組み合わせについては、JDBCドライバの仕様に依存するため、使用するJDBCドライバのマニュアルを参照してください。
Javaのデータ型とInterstage永続性プロバイダが使用するJDBCドライバのAPIとの対応について、以下に説明します。
注意
SQLデータ型がCHAR型の場合の注意事項
クエリメソッドの実行結果に、CHAR型のデータ(ResultSetMetaDataのgetColumnTypeメソッドの返却値がjava.sql.Types.CHARと一致するカラムから取得した値)が含まれる場合、文字列末尾の「\u0020」以下のコード値を持つ連続した文字がすべて空白とみなされ取り除かれた後、Entityへセットされます。
標準データ型
以下のデータ型の場合は、JDBCのAPI(setメソッド、getメソッド)が使用されます。
boolean、java.lang.Boolean
byte、java.lang.Byte
short、java.lang.Short
int、java.lang.Integer
long、java.lang.Long
float、java.lang.Float
double、java.lang.Double
java.lang.String
java.math.BigDecimal
java.sql.Date
java.sql.Time
java.sql.Timestamp
byte[]
その他のデータ型
以下のデータ型は標準データ型に変換され、JDBCのAPI(setメソッド、getメソッド)が使用されます。
データ型 | 変換する標準データ型 |
---|---|
char、java.lang.Character | java.lang.String |
char[]、java.lang.Character[] | java.lang.String |
java.math.BigInteger | java.math.BigDecimal |
java.util.Date | 定義したTemporalType |
java.util.Calendar | 定義したTemporalType |
enum(ordinal) | java.lang.Integer |
enum(String) | java.lang.String |
その他 | byte[] |
注意
Interstage永続性プロバイダは、Entityに格納されているデータに変更がない場合はデータベースにUPDATE文を発行しません。ユーザアプリケーションからEntityの永続化フィールドに対して変更があったかどうかを確認するために、Entityの検索またはマージ時にデータのコピーを作成し、フラッシュまたはトランザクションのコミット時にデータを比較します。byte[]に変換される「その他」のデータ型の場合は、直列化処理後のbyte配列を比較します。そのため、直列化と直列化復元処理によりbyte配列が変わるデータ型(java.util.Hashtable、java.util.Propertiesなど)を使用すると、検索だけ行ったトランザクションでもUPDATE文が発行される場合があります。
その他の永続性プロバイダを使用する場合は、その永続性プロバイダのマニュアルを参照してください。