【问题标题】:minimum hibernate version compatible with java8与 java8 兼容的最低休眠版本
【发布时间】:2026-01-16 05:40:01
【问题描述】:

我很难找出支持在 java8 JRE 上运行的 Hibernate 的最低版本,其中用户代码将使用 java8 功能。

我找到了this bug,但它谈到了在 hibernate 中使用 java8 功能,它计划用于 hibernate 5.2 并且肯定 hibernate 4.3.1 已经支持 java8,因为 Wildfly 发布了它并声称完全支持 java8。

我试图找到与 java8 相关的 in the hibernate bug tracker 错误,但同样都是“太新”。

最后,我在 Hibernate 发行说明中搜索了 .0 版本,但再次没有成功:发行说明似乎只会描述自上一个 RC 或 beta 版本以来的更改...我尝试跟踪所有 RC 和 beta发布 4.3.0.Final 和 4.2.0.Final 但未能找到这样的提及。

我们目前正在使用 Hibernate 4.2.12.Final,我想知道我们是否可以开始使用 java8 或者我们是否需要升级到更新版本的 hibernate(大概是 4.3.x)。

在某些情况下,我们使用 TomEE 作为应用服务器。刚刚发布的 1.7.0 支持 java8。但是,如果我们必须升级到休眠 4.3.x,我有点担心我们不能将休眠 4.3.x 与 TomEE 一起使用,因为我已经看到了:"However, Hibernate 4.3+ (JPA 2.1) is not supported by TomEE, because it's Java EE 7."。因此,如果可能的话,我们宁愿坚持使用 4.2.x。

编辑:好吧,我找到了this,其中有人说“我们使用休眠(并且 4.3.x 支持 java 8)”。所以可能需要 4.3.x。

【问题讨论】:

    标签: java hibernate java-8 apache-tomee


    【解决方案1】:

    这取决于您所说的“用户代码将使用 java8 功能”是什么意思。在我工作的地方,我们仍然使用古老版本的 Hibernate 3 和 Java 8,它运行良好。但是,我们的实体都没有使用 Java 8 功能,只有使用我们实体的代码才使用。

    我认为 Hibernate 和 Java 8 的问题与了解如何映射使用 lambda 或默认方法以及新的 Optional 类和 time 包的实体有关。

    如果你不需要映射到那些,你应该没问题。

    【讨论】:

    • 我正在阅读有关 OpenJPA 的信息,我认为他们的字节码操作代码(需要延迟加载等)与新的 java8 字节码指令不兼容。对于 OpenJPA,我认为他们需要升级他们正在使用的 asm 库。我假设 hibernate 也有类似的问题,但如果你是对的,那就更好了(这可以解释为什么他们从未真正宣传过 java8 支持)。
    • (那么我可能甚至误解了 OpenJPA 的情况,也许他们不能用 java8 构建但可以在 java8 上运行......)。很难 100% 确定。
    • @EmmanuelTouzery 我不知道,我们甚至不使用 OpenJPA,而只是使用原始休眠,所以至少对我们来说这不是问题。
    • 我的意思是,例如 tomee 1.6.0 与 java8 不兼容,与 glassfish 3.1.2.2 相同。这些应用程序在 java8 下运行时会崩溃。我认为旧版本的休眠会是这种情况,也许毕竟不是这样(我想知道它是否对你有用,只是“运气”,明天你开始使用一些高级休眠功能,它会坏掉) .
    • 嗯,我们正在 java8 上使用 hibernate 4.2 测试我们的设置,到目前为止确实没有发现任何问题。所以在被证明是错误的之前,我会假设你是对的,并且任何相对较新的 Hibernate 版本都没有兼容性问题。谢谢!
    【解决方案2】:

    除了在其他答案中讨论的运行时兼容性之外,Hibernate 从 5.0.x 版本开始提供 hibernate-java8 模块 - 它添加了 Java 8 特定支持,主要用于 java.time 包数据类型。

    【讨论】: