Javaの整数型は、OracleのNUMBER
と完全には一致しません。 種類。基本的に、世界間でマッピングする方法は2つあり、どちらも不完全です。
-
現状: 厳密に
NUMBER(3)
未満 ->Byte
。これにより、SQL値を常にそのJava型に読み取ることができることが保証されます。一部のJava値はSQL型に書き込めない場合があります。
-
代替案:
Byte
->NUMBER(3)
以下。これにより、Javaの
byte
値はいつでもデータベースに書き込むことができます。ただし、一部のDB値はJavaタイプに読み取れない場合があります。
jOOQは、次の仮定のため、デフォルトで最初のものになります。
- jOOQは主に「データベースファースト」APIとして使用されます
- ほとんどのデータはDBから読み取られ、DBに書き込まれません
デフォルトの動作
jOOQ 3.8.4では、次のロジックが DefaultDataType.getNumericClass()
:
// Integers
if (scale == 0 && precision != 0) {
if (precision < BYTE_PRECISION) {
return Byte.class;
}
if (precision < SHORT_PRECISION) {
return Short.class;
}
if (precision < INTEGER_PRECISION) {
return Integer.class;
}
if (precision < LONG_PRECISION) {
return Long.class;
}
// Default integer number
return BigInteger.class;
}
// Non-integers
else {
return BigDecimal.class;
}
あり:
int LONG_PRECISION = String.valueOf(Long.MAX_VALUE).length(); // 19
int INTEGER_PRECISION = String.valueOf(Integer.MAX_VALUE).length(); // 10
int SHORT_PRECISION = String.valueOf(Short.MAX_VALUE).length(); // 5
int BYTE_PRECISION = String.valueOf(Byte.MAX_VALUE).length(); // 3
デフォルトのオーバーライド
場合によっては、NUMBER(3)
を使用します byte
を保存する 127
までの番号 たとえば、コード生成フェーズでデータ型の書き換えを指定することで、このデフォルトをオーバーライドできます。これはここに文書化されています:
http://www.jooq.org/doc / latest / manual / code-generation / data-type-rewrites