Мой код выбрасывает указанное выше исключение в следующую строку (строка 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
- это ArrayList следующего POJO:
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, но это не улучшило ситуацию.
Есть предложения?
РЕДАКТИРОВАТЬ: Согласно документации 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.