| org.hibernate.type.MaterializedNClobType has:
- org.hibernate.type.descriptor.java.StringTypeDescriptor#INSTANCE as its JavaTypeDescriptor
- org.hibernate.type.descriptor.sql.NClobTypeDescriptor#DEFAULT as its SqlTypeDescriptor
When org.hibernate.type.descriptor.sql.NClobTypeDescriptor binds a String as an NClob, it calls StringTypeDescriptor#unwrap to "unwrap" the NClob. StringTypeDescriptor#unwrap checks if Clob is assignable from the expected type (NClob). Since NClob extends Clob, a Clob is created and returned. This ultimately causes a ClassCastException when binding the returned value as an NClob. The fix simply moves the check for an NClob before the check for a Clob, so that an NClob will be returned instead. |