2011-05-21 62 views
13

我最近得到了最新版本的Hibernate,并注意到我的UserTypes现在有关于AbstractStandardBasicType的nullSafeGet(ResultSet,String)和nullSafeSet(PreparedStatement,T,int)方法的警告,它们支持使用SessionImplementor参数的相应方法deprecated。问题是,当你实现一个UserType时,SessionImplementor不会像BasicType,CompositeUserType等那样传递给你。弃用后实现Hibernate UserType的最佳方式是什么?

我检查了Hibernate手册,看看是否有更新的例子。他们的UserType示例使用get/set而不是nullSafeGet/nullSafeSet,但这些方法也被弃用,以支持采用SessionImplementor的版本。所以,好像连Hibernate的官方用户类型的例子是使用过时的方法,这使我想知道两件事情:

  1. 有没有好的办法从用户等级和积分中拿到SessionImplementor?
  2. 如果从UserType中获取SessionImplementor并且不想写我自己的nullSafeGet/nullSafeSet,我是否应该放弃UserType以支持其替代选项之一? UserType和BasicType之间的实际区别是什么?
+3

在hibernate-dev邮件列表中有关于此主题的对话:[here](http://lists.jboss.org/pipermail/hibernate-dev/2011-February/006030.html) – 2011-08-23 17:04:58

+1

有没有解决这个问题在4.1.0.Final?它似乎不是如此... – MetaChrome 2012-04-09 23:25:08

+0

我希望我能告诉你。我迁移到JPA,并坚持使用标准的JPA注释,但不幸的是,它不支持任何类似UserTypes的注释。 – spaaarky21 2013-01-04 00:30:29

回答

5

感谢Ryan Ransford对我原来的问题的评论。虽然这不是问题的解决方案,但他从Hibernate开发人员邮件列表中提供的link解释了为什么没有解决方案可用。

在3.6.x中不提供一个不推荐的替代方案,因为做 这样会破坏UserType的实现。

考虑到这些仅仅是弃用警告,在下一个非维护版本可用时将花费太多时间用于解决方法是没有意义的。不幸的是,下一个大版本是4.0,而不是3.7,所以迁移可能会涉及更多一点。

+1

好吧..?因此,如果我从v3.something迁移到v4.something,我该如何处理现在不推荐使用的UserType的nullSafeGet/nullSafeSet方法? – KyleM 2013-06-10 12:46:33

+0

@KyleM我最终迁移到严格的JPA方法,并且无法确定。在Hibernate 4.2 JavaDocs中,我发现已经删除了不推荐使用的方法,但仍然有一个采用SessionImplementor的nullSafeGet()/ Set()方法。我假设你的UserType会实现这些方法,但我不能评论正确的方法,因为我从来没有做过。 – spaaarky21 2013-06-10 19:10:31

相关问题