Лучший способ реализовать Hibernate UserType после стираний?
Недавно я получил самую последнюю версию Hibernate и заметил, что у моих UserTypes теперь есть предупреждения о методах AbstractStandardBasicType nullSafeGet (ResultSet, String) и nullSafeSet (PreparedStatement, T, int), которые устарели в пользу их соответствующих методов, которые принимают аргумент SessionImplementor. Проблема в том, что при реализации пользовательского типа SessionImplementor не передается вам так, как это делается в BasicType, CompositeUserType и т.д.
Я проверил руководство Hibernate, чтобы узнать, есть ли обновленный пример. В их примере UserType используется get/set вместо nullSafeGet/nullSafeSet, но эти методы также устарели в пользу версий, которые используют SessionImplementor. Таким образом, кажется, что даже официальный пример UserType Hibernate использует устаревшие методы, что заставляет меня задаться вопросом две вещи:
- Есть ли хороший способ получить SessionImplementor из UserType?
- Если не представляется возможным получить SessionImplementor из UserType, и я не хочу писать свой собственный nullSafeGet/nullSafeSet, должен ли я отказаться от UserType в пользу одной из его альтернатив? Каковы практические различия между UserType и, например, BasicType?
Ответы
Ответ 1
Спасибо Райану Рэнсфорду за его комментарий к моему оригинальному вопросу. Хотя это не является решением проблемы, ссылка которую он предоставил из списка рассылки разработчиков Hibernate, объясняет, почему решение не доступно.
Не устаревшая альтернатива не может быть указана в 3.6.x, поскольку так что нарушат реализации UserType.
Учитывая, что это просто предупреждения об устаревании, не имеет смысла вкладывать слишком много времени в обходной путь, который будет устаревшим, когда будет доступен следующий выпуск без обслуживания. К сожалению, следующий большой выпуск - 4.0, а не 3.7, поэтому миграция может быть немного более сложной.