簡體   English   中英

在沒有注釋的情況下將Hibernate遷移到JPA

[英]Migrating Hibernate to JPA without annotations

我有一個大型的非Java EE,基於JSF的Web應用程序項目。 我們的系統是分層的(在源代碼意義上):有一個數據模型包,在此基礎上是DAO包。 我們在DAO包中專門使用Hibernate的XML配置映射。 我們真的不想用注釋來混淆數據模型,但是並沒有專門與Hibernate結合(除了映射非常復雜)。

我強烈考慮轉向Java EE並將DAO對象構建為EJB。 但是由於我們不願意放棄Hibernate的XML,這引出了幾個問題:

  • 是否有可能在沒有JPA注釋的情況下將Hibernate與JPA一起使用?
  • 如果沒有,我的EJB是否有可能在Hibernate上以事務方式運行? 我認為這稱為JTA支持,但不確定。 我喜歡“免費”獲取交易的想法; 現在我們有一個自定義編碼的階段監聽器,我想刪除哪個處理Hibernate事務。
  • 有沒有辦法從Hibernate的XML映射配置遷移到某種JPA XML映射? 我沒有看到這樣做的方法,但顯然減少我們與Hibernate的耦合會更好。

謝謝!

是否有可能在沒有JPA注釋的情況下將Hibernate與JPA一起使用?

是的,這很有可能。 您可以在JPA標准映射文件 - orm.xml指定對象模型類的所有相關屬性。 您也可以擁有自己的映射文件,但是您需要在persistence.xml指定它們。

如果沒有,我的EJB是否有可能在Hibernate上以事務方式運行? 我認為這稱為JTA支持,但不確定。

如果您使用的是EJB,那么您會發現容器管理的事務非常有用。 您需要做的就是使用所需的@TransactionManagement@TransactionAttribute注釋來注釋EJB,容器將自動為您管理事務,包括在方法結束時提交事務(如果適用),並回滾發生運行時異常或應用程序異常時的事務。

注入此類EJB的所有EntityManager實例(即所有持久性上下文)將自動與基礎JTA事務關聯。 請注意,僅當您允許容器注入EntityManager實例時才會出現這種情況。 如果您自己管理持久性上下文(通過從EntityManagerFactory實例創建它們),則可能必須調用EntityManager.joinTransaction()以將持久性上下文中執行的所有工作與基礎JTA事務相關聯。 這是必要的,因為如果已將持久性上下文配置為使用JTA數據源,則EntityManager通常會將自身與基礎JTA事務關聯。 如果不存在JTA事務,則不會發生此類關聯,因此如果要將更改刷新到數據庫,則必須使用活動JTA轉換進行聯接。

有沒有辦法從Hibernate的XML映射配置遷移到某種JPA XML映射?

我不知道任何這樣的工具,因為我從來沒有必要遷移項目,但這並不意味着沒有任何工具可以用於此目的。 你可能想看看支持JPA的Hibernate Tools項目,雖然我不確定它是否允許你從Hibernate XML格式轉換為JPA格式。

是的,JPA還支持XML映射。 除了標准的persistence.xml ,還有orm.xml和其他xml文件根據JPA xml架構聲明實體。 這是一個參考

對於事務性EJB - 是的,它們可以是事務性的(在模型上有或沒有JPA注釋)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM