@Override
public void disintegrate(SessionFactoryImplementor sfi, SessionFactoryServiceRegistry sfsr) {
try {
Field descriptorsField = SqlTypeDescriptorRegistry.class.getDeclaredField("descriptorMap");
descriptorsField.setAccessible(true);
Map<Integer,SqlTypeDescriptor> sqlDescriptors = (Map<Integer,SqlTypeDescriptor>) descriptorsField.get(SqlTypeDescriptorRegistry.INSTANCE);
List<Integer> toRemoveSql = new ArrayList<>();
for (Map.Entry<Integer,SqlTypeDescriptor> entry : sqlDescriptors.entrySet()) {
if (entry.getValue().getClass().getClassLoader() == cl) {
toRemoveSql.add(entry.getKey());
}
}
for (Integer key : toRemoveSql) {
sqlDescriptors.remove(key);
}
} catch (Exception e){}
}