Недавно я получил последнюю версию Hibernate и заметил, что мои пользовательские типы теперь содержат предупреждения о том, что методы AbstractStandardBasicType nullSafeGet(ResultSet,String) и nullSafeSet(PreparedStatement,T,int) являются устарел в пользу соответствующих методов, принимающих аргумент SessionImplementor. Проблема в том, что когда вы реализуете UserType, SessionImplementor не передается вам так, как это происходит в BasicType, CompositeUserType и т. д.
Я проверил руководство Hibernate, чтобы увидеть, есть ли обновленный пример. Их пример UserType использует get/set вместо nullSafeGet/nullSafeSet, но эти методы также устарели в пользу версий, которые принимают SessionImplementor. Итак, кажется, что даже в официальном примере Hibernate UserType используются устаревшие методы, что заставляет меня задуматься о двух вещах:
- Есть ли хороший способ получить SessionImplementor из UserType?
- Если нецелесообразно получать SessionImplementor из UserType, и я не хочу писать свой собственный nullSafeGet/nullSafeSet, должен ли я отказаться от UserType в пользу одной из его альтернатив? Каковы практические различия между UserType и, например, BasicType?