今天我发布了 Hibernate ORM 5.0 (5.0.0.Final)。这是一个漫长的过程,是许多人的努力成果。感谢所有帮助我们到达这里的每个人,包括修复、错误报告、建议、输入和鼓励!
5.0 版本中进行了大量的开发。以下是主要亮点
新的引导API
传统的引导 Hibernate(构建SessionFactory)的方法是使用其 Configuration 类。Configuration 历史上允许用户按任何顺序迭代添加设置和映射,并在过程中查询设置和映射信息的状态。这意味着构建映射信息不能有效地依赖于任何可用设置。这导致了许多限制和问题。
5.0 引入了一个新的引导 API,旨在缓解这些限制和问题,同时提供更好的确定性以及更好的集成。有关使用新 API 的详细信息,请参阅用户指南中的引导章节。
Configuration 仍然可用于使用,尽管在有限范围内。一些方法已被删除。在幕后,Configuration 使用新的引导 API。
空间/GIS 支持
Hibernate Spatial 是一个已经存在多年的项目。Karel Maesen 在它上面做了惊人的工作。
从 5.0 版本开始,Hibernate Spatial 现在是 Hibernate 项目的正式部分,以便它能更好地跟上上游开发。它作为 org.hibernate:hibernate-spatial
提供。如果你的应用程序需要 GIS 数据,我们强烈建议尝试使用 hibernate-spatial。
Java 8 支持
好吧,好吧.. 并非所有的 Java 8。具体来说,我们添加了对 Java 8 日期和时间 API 的支持,这允许您使用 Java 8 日期和时间 API 类型轻松地将您的域模型中的属性映射到数据库。此支持在 hibernate-java8 艺术品下提供(以隔离 Java 8 依赖项)。有关更多信息,请参阅域模型映射指南中的基本类型章节。
扩展 AUTO id 生成支持
JPA定义了对GenerationType#AUTO的支持仅限于数字类型。从5.0开始,Hibernate提供了对更广泛类型的可扩展支持,包括对数字类型(Integer、Long等)和UUID的内置支持。用户还可以通过新的org.hibernate.boot.model.IdGeneratorStrategyInterpreter
扩展自由地插入自定义策略来解释GenerationType#AUTO。
命名策略拆分
为了更好地设计的API,已经删除了NamingStrategy。实际上有两个不同的策略
-
org.hibernate.boot.model.naming.ImplicitNamingStrategy
- 在没有显式指定名称时用于确定要使用的名称 -
org.hibernate.boot.model.naming.PhysicalNamingStrategy
- 用于将表或列的“逻辑名称”(无论是隐式还是显式)转换为物理名称(例如,遵循公司命名指南)
属性转换器支持
5.0提供了对JPA 2.1属性转换器的显著改进支持
-
完全支持非@Enumerated枚举值
-
与@Nationalized支持结合使用
-
现在用于处理null值
-
通过在hbm.xml中使用type="converter:fully.qualified.AttributeConverterName"来设置
-
与hibernate-envers集成
-
集合值、映射键
-
支持参数化类型的转换
事务管理
作为5.0的一部分,事务SPI也经历了重大重构。从用户的角度来看,这通常只体现在配置方面。以前,应用程序会通过org.hibernate.Transaction
API直接与不同的后端事务策略一起工作。在5.0中,这里增加了一层间接性。现在org.hibernate.Transaction
的API实现始终相同。在后台,org.hibernate.Transaction
实现与代表特定会话的“事务上下文”的org.hibernate.resource.transaction.TransactionCoordinator
进行通信,这取决于后端事务策略。用户通常不需要关心这种区别。
这里记录了这一变化,因为它可能会影响您的启动配置。以前,应用程序会指定hibernate.transaction.factory_class
并引用一个org.hibernate.engine.transaction.spi.TransactionFactory
FQN,但在5.0中,新的合约是org.hibernate.resource.transaction.TransactionCoordinatorBuilder
,并使用hibernate.transaction.coordinator_class
设置进行指定。有关更多详细信息,请参阅org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY
JavaDocs。
以下为已识别的短名称:jdbc
::(默认)表示使用基于JDBC的事务(org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl
)jta
::表示使用基于JTA的事务(org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl
)
请参阅用户指南以获取更多详细信息。
改进的OSGi支持
这实际上始于对hibernate-osgi测试脆弱性的挫败感。第一步是一个更好的测试设置,使用Pax Exam和Karaf。这导致我们生成(现在发布!)Hibernate Karaf功能文件。
由于来自一些Karaf和Pax开发者和用户的反馈,OSGi支持也经历了一些一般性的改进。
请参阅入门指南以获取有关使用新的Karaf功能文件的更多详细信息。
文档工作
为5.0版本投入了大量精力在文档编写上。它仍然没有完成(文档何时才算完成呢?),但已经得到了很大提升。
查看全新的文档页面获取详细信息。
BinTray
目前计划将发布版本包(zip和tgz)发布到BinTray。我们还将继续在SourceForge上发布。暂时,我们将同时在两个平台上发布包。
最终,我们也将开始在那里发布“maven”组件。
这些都是正在进行中的工作。