5.2.9 CMPフィールドとデータ型のマッピング

Cosminexusで提供するEJBコンテナのCMP機能でのEntity BeanのJavaデータ型とデータベースのSQLデータ型の対応について説明します。

<この項の構成>
(1) CMPでサポートするJavaデータ型の範囲
(2) 注意事項
(3) HiRDBの場合のマッピング一覧
(4) Oracleの場合のマッピング一覧

(1) CMPでサポートするJavaデータ型の範囲

EJBコンテナのEntity BeanのCMPでサポートするJavaデータ型の範囲と,プライマリキーへの指定の可否を次の表に示します。

表5-14 CMPでサポートするJavaデータ型の範囲

Javaデータ型値の範囲プライマリキーへの指定
booleantrue,false×
java.lang.Boolean
byte-128~127×
java.lang.Byte
char'¥u0000'~'¥uffff'(0~65535)×
java.lang.Character
short-32768~32767×
java.lang.Short
int-2147483648~2147483647×
java.lang.Integer
long-9223372036854775808~9223372036854775807×
java.lang.Long
float±1.40239846e-45~±3.40282347e+38×
java.lang.Float
double±4.94065645841246544e-324~±1.79769313486231570e+308×
java.lang.Double
byte[]1Byte~2147483647Byte×
java.lang.String
java.math.BigDecimal×
java.sql.Date×
java.sql.Time00:00:00~23:59:59×
java.sql.TimeStamp×
Serializableな型×
(凡例)
○:プライマリキーに指定できる。
×:プライマリキーに指定できない。
-:該当しない。
注※ 浮動小数点を扱う場合,丸めが発生する可能性があります。

(2) 注意事項

(3) HiRDBの場合のマッピング一覧

EJBコンテナのEntity BeanのCMPでのフィールドとデータベースのマッピングを次の表に示します。

なお,表中の「Javaデータ型」はCMPがサポートするJavaのデータ型,「JDBCデータ型」はJavaのデータ型に対応するJDBCのjava.sql.Types.のデータ型,「SQLデータ型」はJavaデータ型とのマッピングで推奨するDBカラムの型となります。

表5-15 CMPでのフィールドとデータベースのマッピング(HiRDB使用時)

Javaデータ型JDBCデータ型SQLデータ型
booleanSMALLINTSMALLINT
java.lang.Boolean
byteSMALLINTSMALLINT
java.lang.Byte
char※1CHARCHAR(4)
java.lang.Character※1
shortSMALLINTSMALLINT
java.lang.Short
intINTEGERINTEGER
java.lang.Integer
longDECIMALDECIMAL(22)
java.lang.Long
floatREALREAL,SMALLFLT
java.lang.Float
doubleFLOATDOUBLE PRECISION
java.lang.Double
byte[]※2LONGVARBINARYBLOB
java.lang.String※1VARCHARVARCHAR(m)
CHAR(n)
MVARCHAR(m)
MCHAR(n)
NVARCHAR(x)
NCHAR(y)※3
java.math.BigDecimalDECIMALDECIMAL(m,n)※4
java.sql.DateDATEDATE※5
java.sql.TimeTIMETIME
java.sql.TimeStamp※6CHARCHAR(29)
Serializableな型※2LONGVARBINARYBLOB
注※1 固定長文字列のSQL型を使用する場合の注意については,「(2) 注意事項」を参照してください。
注※2 [HiRDB BLOB最大値] 2147483647バイト
注※3 m,n,x,yの範囲はそれぞれ次のとおりです。
m:1~30000,n:1~32000,x:1~15000,y:1~16000
注※4 m,nの範囲はそれぞれ次のとおりです。
m:1~29,n:1~29
注※5 DATEの範囲は,0001/01/01~9999/12/31です。
注※6 「yyyy-mm-dd hh:mm:ss.fffffffff」(JDBC日付エスケープ)形式の文字列として格納します。

(4) Oracleの場合のマッピング一覧

EJBコンテナのEntity BeanのCMPでのフィールドとデータベースのマッピングを次の表に示します。

なお,表中の「Javaデータ型」はCMPがサポートするJavaのデータ型,「JDBCデータ型」はJavaのデータ型に対応するJDBCのjava.sql.Types.のデータ型,「SQLデータ型」はJavaデータ型とのマッピングで推奨するDBカラムの型となります。

表5-16 CMPでのフィールドとデータベースのマッピング(Oracle使用時)

Javaデータ型JDBCデータ型SQLデータ型
booleanNUMERICNUMBER(38)
java.lang.Boolean
byteNUMERICNUMBER(38)
java.lang.Byte
char※1CHARCHAR(4)
java.lang.Character※1
shortNUMERICNUMBER(38)
java.lang.Short
intNUMERICNUMBER(38)
java.lang.Integer
longNUMERICNUMBER(22)
java.lang.Long
floatNUMERICNUMBER
java.lang.Float
double※2FLOATFLOAT(126)
java.lang.Double※2
byte[]※3LONGVARBINARYLONG RAW
java.lang.String※1VARCHARVARCHAR(m)
CHAR(n)
LONG※4
java.math.BigDecimalNUMERICNUMBER(m,n)※5
java.sql.DateDATEDATE※6 ※7
java.sql.TimeCHARCHAR(8)※8
java.sql.TimeStampTimeStampDATE※7 ※9
Serializableな型※3LONGVARBINARYLONG RAW
注 java.sql.Types.BLOBにマッピングされるBLOB,およびjava.spl.Types.CLOBにマッピングされるCLOBは扱えません。
注※1 固定長文字列のSQL型を使用する場合の注意については,「(2) 注意事項」を参照してください。
注※2 [Oracle FLOAT(126)の範囲] 1E-125~9.9・・・9E125
ただし,「丸め」が発生するおそれがあります。
注※3 [Oracle LONG RAW最大値] 2ギガバイト。
注※4 m,nの範囲はそれぞれ次のとおりです。
m=1~4000,n=1~2000
また,""(長さゼロの空文字)をOracleに格納するとNULLに変換されます。
注※5 m,nの範囲はそれぞれ次のとおりです。
m=1~38,n=-84~127
注※6 DATEの範囲は,-4712/01/01~9999/12/31です。
注※7 紀元前データはJava-JDBCドライバ間でマイナス値が正しく扱えないため,値は保証されません。
注※8 「hh:mm:ss」(JDBC日付エスケープ)形式の文字列として格納します。
注※9 DATEの範囲は,-4712/01/01 00:00:00~9999/12/31 23:59:59です。なお,Oracle8iでは小数点以下の秒数は扱えません。