我刚刚看到 Hibernate 5 发布了第 4 个候选版本。与早期版本相比,Hibernate 5 有什么新功能?
2 回答
在 Hibernate 5.x 中添加/增强了一些令人兴奋的功能。快速浏览一下。
1. 休眠搜索
Hibernate Search 透明地索引您的对象并提供快速的常规、全文和地理位置搜索。易于使用和易于集群是核心。
- 实体的全文搜索 -近似查找(模糊搜索)
- 集群友好 -提供几种易于设置的集群策略
- 分面和地理定位 - 地理定位实体就像@Spatial 一样简单
有关 Hibernate Search 的更多详细信息,请查看此内容。
2.休眠验证器
Hibernate Validator 带有一些内置的验证规则,如电子邮件、长度、NotBlank 等。
使用基于注释的约束以标准化的方式表达验证规则,并从与各种框架的透明集成中受益。
有关 Hibernate Validator 的更多详细信息,请查看此内容。
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 路线图以获取更多详细信息。
在 Hibernate 5 中,有一长串发生了变化的事情:
一个新的引导 API,因此我们可以在不需要
persistence.xml
文件的情况下以编程方式引导 JPA 环境。从 5.0 开始,Hibernate Spatial 是 Hibernate 项目的一部分,因此我们也可以处理 GIS 数据。
域模型映射支持Java 8 日期和时间类型。标准 SQL 日期/时间类型与支持的 Java 8 日期/时间类类型之间的映射如下所示;
- 日期:
java.time.LocalDate
- 时间:
java.time.LocalTime
,java.time.OffsetTime
- 时间戳:
java.time.Instant
、java.time.LocalDateTime
和java.time.OffsetDateTime
java.time.ZonedDateTime
- 日期:
字节码增强机制从头开始重新设计,Hibernate 同时具有 Maven 和 Gradle 插件。我们可以通过字节码检测来增强三个主要方面:
延迟初始化:字段可以声明为
LAZY
,只有在第一次访问时才会被获取。脏检查:增强了实体,以便它们可以跟踪在持久性上下文中加载后更改的所有属性。
双向关联:可以自动同步双向关联的双方,即使开发人员只更新单方。
Hibernate 的原生 API(
Session
等)已更新为使用泛型类型。获取实体时无需强制转换。Hibernate 5.0 将此扩展到更广泛的类型集(例如
UUID
)。二级缓存引用。此功能支持将实体引用直接存储到不可变实体的二级缓存中。
从 Hibernate 5.0 开始,我们有一个从头开始编写的全新用户指南。
Hibernate 5.1增加了以下特性:
Hibernate 5.2增加了对:
- Java 1.8,所以你现在可以使用
Query.stream()
- Hibernate
Session
扩展EntityManager
,因此您可以直接从Session
- 支持 JCache
- 会话级批量大小
- 全球时区设置(例如 UTC)
Timestamp
和Time
- 不同的传递提示
- 更高效的 JPQL 和 HQL 解析常量值
hibernate.connection.provider_disables_autocommit
资源本地事务优化。- 更好地处理 Criteria API 文字。