Лучший способ реализовать Hibernate UserType после устаревших? - PullRequest
13 голосов
/ 21 мая 2011

Недавно я получил последнюю версию Hibernate и заметил, что мои UserTypes теперь имеют предупреждения о методах nullSafeGet (ResultSet, String) и nullSafeSet (PreparedStatement, T, int) в AbstractStandardBasicType, которые устарели в пользу их соответствующих методы, которые принимают аргумент SessionImplementor. Проблема в том, что при реализации UserType SessionImplementor не передается вам так, как это делается в BasicType, CompositeUserType и т. Д.

Я проверил руководство Hibernate, чтобы увидеть, был ли обновленный пример. Их пример UserType использует get / set вместо nullSafeGet / nullSafeSet, но эти методы также устарели в пользу версий, которые принимают SessionImplementor. Таким образом, кажется, что даже официальный пример UserType Hibernate использует устаревшие методы, что заставляет меня задуматься о двух вещах:

  1. Есть ли хороший способ получить SessionImplementor из UserType?
  2. Если нецелесообразно получать SessionImplementor из UserType, и я не хочу писать свой собственный nullSafeGet / nullSafeSet, должен ли я отказаться от UserType в пользу одной из его альтернатив? Каковы практические различия между UserType и, например, BasicType?

1 Ответ

5 голосов
/ 20 ноября 2011

Спасибо Райану Рэнсфорду за его комментарий к моему первоначальному вопросу. Хотя это не совсем решение проблемы, ссылка , которую он предоставил из списка рассылки разработчиков Hibernate, объясняет, почему решение не доступно.

Неразрешенная альтернатива не может быть предоставлена ​​в 3.6.x, потому что так что сломали бы реализации UserType.

Учитывая, что это всего лишь предупреждения об устаревании, не имеет смысла тратить слишком много времени на обходной путь, который устареет, когда выйдет следующий не требующий обслуживания выпуск. К сожалению, следующая большая версия - 4.0, а не 3.7, поэтому миграция может быть немного более сложной.

...