一尘不染

弃用后实现Hibernate UserType的最佳方法?

hibernate

我最近获得了最新版本的Hibernate,并且注意到我的UserTypes现在有警告,关于不赞成AbstractStandardBasicType的nullSafeGet(ResultSet,String)和nullSafeSet(PreparedStatement,T,int)方法,建议使用带有SessionImplementor参数的相应方法。问题在于,当您实现UserType时,SessionImplementor不会像BasicType,CompositeUserType等那样传递给您。

我检查了Hibernate手册,看看是否有更新的示例。他们的UserType示例使用get / set而不是nullSafeGet /
nullSafeSet,但是不赞成使用那些使用SessionImplementor的版本的方法。因此,似乎甚至Hibernate的官方UserType示例都在使用不推荐使用的方法,这使我想知道两件事:

  1. 是否可以从UserType中获取SessionImplementor?
  2. 如果从UserType中获取SessionImplementor是不切实际的,并且我不想编写自己的nullSafeGet / nullSafeSet,我是否应该放弃UserType而是选择其中一种?UserType与例如BasicType之间的实际区别是什么?

阅读 218

收藏
2020-06-20

共1个答案

一尘不染

感谢Ryan
Ransford对我的原始问题的评论。尽管这并不是真正解决问题的方法,但他从Hibernate开发人员邮件列表中提供的链接说明了为什么没有可用的解决方案。

3.6.x中不能提供不建议使用的替代方法,因为这样做会破坏UserType的实现。

考虑到这些只是过时的警告,在下一个非维护版本可用时将过多的时间花在一个过时的解决方法上是没有意义的。不幸的是,下一个大版本是4.0,而不是3.7,因此迁移可能会涉及更多。

2020-06-20