Hibernate的Type注解已经被弃用,有什么替代方案?

30
在升级到Hibernate 5.6.0.Final之后,我发现org.hibernate.annotations.Type现在已被弃用。我在许多实体中使用此注释,包括我利用Hibernate自己的NumericBooleanType的地方。
 @Type(type = "org.hibernate.type.NumericBooleanType")
 private Boolean debug = false;

我已经查阅了Hibernate文档(迁移指南 - 其中6.0版本的页面在http://hibernate.org/orm/documentation/6.0/上显示404错误),Javadocs,论坛和网络,但都找不到替代方法。

有没有人知道,在Hibernate 5.6.0中我应该怎么使用Type注解准备进行向Hibernate 6的过渡?


1
为什么你不能直接移除它呢? - Arthur Klezovich
1
@ArthurKlezovich - 我不确定你在建议什么。我正在使用一些自定义类型。你是说,特别是对于NumericBooleanType,我改变我的数据库和实体不使用自定义类型吗? - John Casebolt
3个回答

24

编辑:该更改已在5.6.3中撤销。不应再有任何弃用警告。


除非有足够多的人在此问题上投诉并导致他们在5.6.1或其他版本中撤销更改,否则在升级到6.0之前无法做任何事情。

Hibernate做出了一个不同寻常的决定,在没有替代方案的情况下提前废弃这些注释。

我不知道为什么。唯一的副作用是让人们抑制警告,然后在发布6.0时忘记做出更改。


3
升级到SpringBoot 2.6.1后发现了一个使用@TypeDef注解的问题,这会引入Hibernate 5.6.1 final版本。Hibernate采取的很奇怪的做法是在提供替代方案之前先将其废弃。现在我们无法消除令人烦恼的警告(除非我们回退)。 - Tom Bunting
1
@SteveEbersole 来自维基百科:在几个领域中,弃用是指不鼓励使用某些术语、特性、设计或实践,通常是因为它已被取代或不再被认为是有效或安全的,而并非完全删除它或禁止其使用。 - OrangeDog
1
@SteveEbersole 这里并不是那种情况。这个API尚未被取代,并且也没有关于为什么不应该使用它的声明。就我所知,它的性能和安全性都没有问题。问题不仅在于你做了一些非常不寻常的事情,而且还没有解释清楚。 - OrangeDog
2
@SteveEbersole Java文档中说:“使用 @Deprecated 注释的程序元素是不建议程序员使用的”,但这里并非如此。如果Hibernate打算建议在Hibernate 5中不使用自定义类型,它还没有在任何地方解释过这一点。 - OrangeDog
1
@SteveEbersole Sonar将弃用类的使用标记为代码异味。这可能会(并且确实)破坏许多Java项目的质量构建,包括我的项目。 - Martin Försterling
显示剩余4条评论

23

-12

这是一个相当符合你预设观点的逻辑推论。 “不建议使用”绝不意味着“目前存在替代品”。


这是值得为之奋斗的一座山。现在没有人再使用谷歌搜索,也没有人会因为你的工作而认识你。这是一个悲伤的事实... - Paul
我认出了他,我仍然认为这个答案很愚蠢。如果你查看@Deprecated的Javadoc,它明确提到你应该包含有关正确替代方法的说明,而不是威胁要立即取消某个功能,而没有逐步过渡的机会。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接