Hibernate5新特性介绍
作者:动力节点 发布时间:2023-01-02 16:28:09
在hibernate5中,有了一些新的变动:
新引导 API
Spatial/GIS 支持
Java 8 支持
扩展 AUTO id 生成支持
命名策略分离
属性转换器支持
更好的 “bulk id table” 支持
事务管理
模式工具链
Session API类化
改进 OSGi 支持
改进 bytecode 增强功能
新的引导API
用来引导Hibernate(建立一个SessionFactory)的经典方式一直都是利用Configuration配置类。从hibernate的古老版本到现在,它一直支持用户按任意的顺序添加新的配置和关系映射,并允许我们在程序运行过程中查询获取相应的状态和映射信息。但这也意味着我们不能根据一些实时配置高效地建立映射信息。这导致许多限制和问题。
5.0引入了一个新的引导API旨在减轻这些限制和问题,同时允许我们更好的完成整合工作。想要连接更多关于新的引导API配置指南可到hibernate 官网的User Guide部分
在一定的限制上,Configuration配置方法仍然可以使用,不过它的一些方法已被删除。在新的引导API底层实现部分,Configuration类仍大有作用.
Spatial/GIS 支持
Hibernate Spatial是一个已经存在了数年的项目.Karel Maesen对此做出了卓越贡献.
从hibernate5.0开始Hibernate Spatial已经是Hibernate项目的一部分,来使其跟上发展的主流,如果你的项目需要使用到GIS数据,我们高度推荐你尝试使用hibernate-spatial
支持Java 8
虽然并非完全支持,更准确来说,hibernate5.0增加了对Java 8 Date 和Time API的支持,以使我们能够更轻松地完成我们的实体映射类的配置属性到数据库的支持.这种支持通过使用专用利器 hibernate-java8来隔离java8的依赖性.有关更多信息,请参阅hibernate官方API Domain Model Mapping Guide中的Basic Types章节
扩展 AUTO id 生成支持
JPA定义的GenerationType.AUTO属性仅支持数字类型.从5.0开始,hibernate高度扩展并支持更广泛的类型,包括内置支持数字类型(如整型(Integer)\长整型(Long))和UUID.通过新的拓展类org.hibernate.boot.model.IdGeneratorStrategyInterpreter,用户还能自由地定制自己的策略来使用GenerationType.AUTO属性
命名策略分离
为了支持更好地接口设计,命名策略被分离成两个主要部分:
1. org.hibernate.boot.model.naming.ImplicitNamingStrategy:使用此属性当
我们使用的表或列没有明确指定一个使用的名称
2. org.hibernate.boot.model.naming.PhysicalNamingStrategy:用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称
属性转换器支持
hibernate 5.0 极大地改进了对JPA2.1属性转换器的支持:
1. 充分地支持非@Enumerated注解的枚举值的使用
2. 适用于与@Nationalized结合使用的支持
3. 可以在hbm.xml文件中通过使用下列格式设置type="converter:fully.qualified.AttributeConverterName"
4. 整合了hibernate-envers
5. 集合数值,映射键值
6. 现在能够有效处理null值
7. 支持参数化类型的转换
更好的 “bulk id table” 支持
对于bulk id table的支持已经被重新设计以更好地适配不同数据库的支持
事务管理
事务SPI也完成了主要的重构设计作为hibernate5.0更新的一部分.从用户的角度来看,这些一般只在涉及到配置部分时才会有所接触,此前应用程序直接将与不同的后端事务策略通过org.hibernate.Transaction有效工作.在5.0中,一定程度地支持已经添加进来,org.hibernate.Transaction的API实现,现在是永远不变的。在后端,该org.hibernate.Transaction IMPL会涉及到org.hibernate.resource.transaction.TransactionCoordinator它代表了“事务上下文”根据后端事务策略给定的会话。用户一般不需要关心的区别。
在此我们要注意这种变化,它可能会影响到我们的引导配置.以前的应用我们指定hibernate.transaction.factory_class并且指向了org.hibernate.engine.transaction.spi.TransactionFactory FQN.在hibernate5.0中,新约定是org.hibernate.resource.transaction.TransactionCoordinatorBuilder以及特定使用 hibernate.transaction.coordinator_class setting.关于更多细节,请查看JAVADocs中的org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY
下面的短名被识别为:
jdbc::(默认值)表示使用基于JDBC的事务(org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl)
jta::says示使用基于JTA的事务 (org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl)
请参阅用户手册了解更多详细信息。
模式工具链
hibernate5.0对于模式工具链提供了大量的支持(比如导出\验证\导入等)
Session API类化
Hibernate的大量内置API,比如(Session等),全部省级成类,不用再进行复杂的类型转化
改进 OSGi 支持
这始于一个不满的脆弱性hibernate-osgi测试.第一部分是一个使用了Pax Exam 和 Karaf的更好的测试启动.这会导致我们生成一个hibernate Karaf风格的文件
OSGi支持经过了很多改善,这需要归功了来自Karaf和Pax开发者和用户的支持
改进 bytecode 增强功能
在hibernate5.0的文档中已经对此进行了很多工作,但它仍有很大的提升空间
总结
以上所述是小编给大家介绍的Hibernate5新特性介绍网站的支持!
来源:http://blog.sina.com.cn/s/blog_9c6852670102wvqc.html


猜你喜欢
- 从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。在C#中,我们必须在设计类型的时候就决定类型实例
- 下面一段内容有项目需求有项目分析,通过一个小demo给大家展示下C#如何对多线程、多任务管理的。项目需求:假设多个任务需要执行,每个任务不是
- 队列的定义:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Fro
- 收费版本:Rainbow Brackets免费版本:Rainbow Brackets Lite介绍一款可以将 (圆括号) [方括号] {花括
- 前言通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,
- 1:@Qualifier@Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了。所以@Auto
- 本文分享的示例代码实现提取2个集合中相同和不同的元素此处需要使用Collection集合所提供的一个方法:removeAll(Cellect
- 虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险。 一、为什么要了解内存泄露和内存溢出?1、内存泄
- 1. 概述官方JavaDocsApi:javax.swing.JCheckBoxJCheckBox,复选框。JCheckBox 常用构造方法
- 本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:Timer类:设置一个定时器,定时执行用户
- 使用Convert接口实现类型转换器在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了
- java 判断两个对象是否为同一个对象用“==”比较的是引用的地址,用equals比较的就是值。那我们new两个相同的对象什么属性都一样,为
- 本文通过优化买票的重复流程来说明享元模式,为了加深对该模式的理解,会以String和基本数据类型的包装类对该模式的设计进一步说明。读者可以拉
- 前言定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行。但定时器线程池也还是线程池,最底层实现还是ThreadPoolEx
- 本文主要介绍了idea中同一SpringBoot项目多端口启动,具体如下:现在已经有一个在跑着使用的默认端口 8080选中1,点击2.这个时
- Java InputStream的任意拷贝有时候,当我们需要多次使用到同一个InputStream的时候如何实现InputStream的拷贝
- 在Maven工程里运行Java main方法mvn compilemvn exec:java -Dexec.mainClass="
- 1.App的启动流程,从startActivity到Activity被创建。这个流程主要是ActivityThread和ActivityMa
- 一、万能的字符串当然,任何时候都可以使用字符串作为属性的值,从配置文件里读取出来,如下:配置文件内容为:pkslow.admin=larry
- Android 判断SIM卡属于哪个移动运营商第一种方法:获取手机的IMSI码,并判断是中国移动\中国联通\中国电信TelephonyMan