【问题标题】:What's new in Hibernate ORM 5?Hibernate ORM 5 有什么新功能?
【发布时间】:2024-05-21 19:10:02
【问题描述】:

我刚刚看到 Hibernate 5 发布了第四个候选版本。与早期版本相比,Hibernate 5 有什么新功能?

【问题讨论】:

  • 您可以通过谷歌搜索“hibernte 5 changelog”找到有关新版本更改的信息。这是:github.com/hibernate/hibernate-orm/blob/master/changelog.txt
  • 除非您指定,否则他们删除了自动提交,并且他们没有记录更改。如果您依赖该功能,请准备好被搞砸。
  • 列表已经很长了,但我认为实体/不相关的连接是 5.1 中引入的一个非常有趣且值得注意的功能。

标签: java hibernate jpa orm hibernate-5.x


【解决方案1】:

在 Hibernate 5.x 中添加/增强了一些令人兴奋的功能。快速浏览一下。

1。休眠搜索

Hibernate Search 透明地为您的对象编制索引,并提供快速的常规、全文和地理位置搜索。易于使用和易于聚类是核心。

  • 实体的全文搜索 - 近似查找(模糊搜索)
  • 集群友好 - 提供多种易于设置的集群策略
  • 刻面和地理定位 - 地理定位实体就像@Spatial 一样简单

For more details on Hibernate Search view this.

2。休眠验证器

Hibernate Validator 带有一些内置的验证规则,如电子邮件、长度、NotBlank 等。

使用基于注释的约束以标准化方式表达验证规则,并受益于与各种框架的透明集成。

For more details on Hibernate Validator view this.

3。改进的 Java 8 支持

支持 Java 8 日期/时间数据类型 (JSR 310),并可通过 @Past 和 @Future 进行验证。此外,通过改进的 ValidatedValueUnwrapper 支持 Optional 和 JavaFX 类型。

4。休眠 OGM

刚刚发布了第一个稳定版本。

5。引导 API

新的引导 API - 更好的确定性,更好的集成


其他一些事情:

  • 对非 JPA 使用的扫描支持
  • NamingStrategy 已被移除,以支持设计更好的 API
  • 能够处理标记为 GenerationType#AUTO 的 id 属性的其他 Java 类型。内置对 Number 和 UUID 的支持。可通过新的 org.hibernate.boot.model.IdGeneratorStrategyInterpreter 扩展进行扩展。
  • 此外,对 AttributeConverters 的支持已得到扩展并得到更充分的实现

查看Hibernate ORM Roadmap了解更多详情。

【讨论】:

  • 但是 SessionFactry 仍然不能真正序列化!我希望这应该在下一个版本中完成
【解决方案2】:

在 Hibernate 5 中有一长串的更改:

  1. 一个新的引导 API,我们可以bootstrap a JPA environment programmatically without the need of a persistence.xml file

  2. 从 5.0 开始,Hibernate Spatial 是 Hibernate 项目的一部分,因此我们也可以处理 GIS 数据。

  3. 域模型映射支持Java 8 Date and Time types。标准 SQL 日期/时间类型与支持的 Java 8 日期/时间类类型之间的映射如下所示;

    • 日期:java.time.LocalDate
    • 时间:java.time.LocalTimejava.time.OffsetTime
    • 时间戳:java.time.Instantjava.time.LocalDateTimejava.time.OffsetDateTimejava.time.ZonedDateTime
  4. 字节码增强机制从头开始重新设计,Hibernate 同时具有 Maven 和 Gradle 插件。我们可以通过字节码检测来增强三个主要方面:

    • 延迟初始化:字段可以声明为LAZY,并且只有在第一次访问时才会被获取。

    • 脏检查:增强了实体,以便它们可以跟踪在持久性上下文中加载后发生更改的所有属性。

    • 双向关联:可以自动同步双向关联的两侧,即使开发人员只更新单侧。

  5. Hibernate 的原生 API(Session 等)已更新为使用泛型类型。获取实体时无需强制转换。

  6. Hibernate 5.0 将此扩展到更广泛的类型集(例如UUID)。

  7. 二级缓存引用。此功能可以将实体引用直接存储到不可变实体的二级缓存中。

  8. 从 Hibernate 5.0 开始,我们有一个完全从头开始编写的 new User Guide

Hibernate 5.1 新增以下功能:

  1. You can now join unrelated entities in JPQL and HQL queries
  2. Multi-entity load by identififer

Hibernate 5.2 支持:

  1. Java 1.8,所以you can now use Query.stream()
  2. Hibernate Session 扩展了 EntityManager,因此您可以直接从 Session 访问所有 J​​PA 方法
  3. 支持 JCache
  4. Session-level batch size
  5. Global timezone setting (e.g. UTC) for Timestamp and Time
  6. Distinct pass-through hint
  7. More efficient JPQL and HQL parsing of constant values
  8. hibernate.connection.provider_disables_autocommit resource-local transaction optimization
  9. Better handling of Criteria API literals

【讨论】:

  • 另一个不兼容的变化是关于序列生成器,Hibernate 5 默认使用新的增强型生成器,并且还使用了与之前策略不兼容的池优化器。
  • 是的,我只是提到这是 Hibernate 5 中的一个重要更改。但是,我建议更改优化器,而不是禁用新的生成器映射(记录弃用警告)。