1. 程式人生 > >hibernate5(1)新特性展示

hibernate5(1)新特性展示

在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 增強功能