De vangst gevonden en het is niet gerelateerd aan de code.
De juiste nullSafeGet in het Hibernate UserType, zoals vermeld in het antwoord waarnaar wordt verwezen, is:
public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
if (logger.isTraceEnabled()) {
logger.trace(" nullSafeSet: " + value + ", ps: " + st + ", index: " + index);
}
try {
XMLType xmlType = null;
if (value != null) {
xmlType = XMLType.createXML(getOracleConnection(st.getConnection()), (String)value);
}
st.setObject(index, xmlType);
} catch (Exception e) {
throw new SQLException("Could not convert String to XML for storage: " + (String)value);
}
}
PROBLEEM: bij gebruik van een SECUREFILE BINARY XML-kolom (niet CLOB) moet u de meest recente (11.2.0.2+) distributie van xdb*.jar gebruiken, in dit geval xdb6.jar (~257kb). De eerdere xdb*.jar (~136kb voor 10.x) zal nog steeds functioneren, zonder uitzonderingen te maken, zelfs als BINARY XML onjuist gedecodeerd wordt.
TL;DR :Download xdb6.jar (~257kb) van de Oracle 11gR2 (11.2.0.3) JDBC-stuurprogrammapagina . Oudere xdb-potten falen stil en zullen je verdrietig maken.