Вы реализуете свой обработчик пользовательского типа. Это совсем не очевидно из вашего вопроса для кого-то, кто не испытал этого.
Удалите эти операторы try-with-resources из всего вашего кода, а не только в данном примере. Я имею в виду эту часть:
try (Connection hikariCon = statement.getConnection()) {
if (hikariCon.isWrapperFor(OracleConnection.class)) {
oracleConection = hikariCon.unwrap(OracleConnection.class);
}
@SuppressWarnings("deprecation")
final STRUCT struct = new STRUCT(StructDescriptor.createDescriptor(DB_OBJECT_TYPE, oracleConection),
oracleConection, values);
statement.setObject(index, struct, SQL_TYPE);
}
должно стать:
Connection hikariCon = statement.getConnection();
if (hikariCon.isWrapperFor(OracleConnection.class)) {
oracleConection = hikariCon.unwrap(OracleConnection.class);
}
final STRUCT struct = new STRUCT(StructDescriptor.createDescriptor(DB_OBJECT_TYPE, oracleConection),
oracleConection, values);
statement.setObject(index, struct, SQL_TYPE);
В разделах try-with-resources для вашего соединения автоматически вызывается close()
, что приводит к ошибке при достижении этой части.