私のコードは、次の行 (この行 2) で上記の例外をスローしています。
final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection());
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray());
それは私に次の例外を与えます:
java.sql.SQLException: Fail to convert to internal representation:
これmyObjects
は、次の POJO の ArrayList です。
public class MyObject
{
private String name;
private String surname;
private int age;
...
// Accessors etc..
}
データベース上のT_PARAM_ARRAY
は次のようになります。
create or replace
TYPE T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1));
調査の結果、POJO とデータベース タイプの間のデータ タイプ マッピングが正しく一致していないと思います。String が VARCHAR2 に一致していることはかなり確信していますが、 を に変換する際に問題があると思いint
ますNUMBER
。
BigDecimal を使用してみましたが、状況は改善されませんでした。
助言がありますか?
EDIT: Oracleのドキュメントによると:Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of type NUMBER. The values array contains an array of elements of type java.math.BigDecimal, because the SQL NUMBER datatype maps to Java BigDecimal by default, according to the Oracle JDBC drivers.