我正在開發一個工具,它使用JPA2處理一些數據庫實體,並使用hibernate作爲持久性提供程序。該工具是通用的,與任何業務邏輯都沒有耦合,它需要一個通用的Class<? extends Task>
參數來完成業務,其中Task是我創建的一個接口,用於表示實現實體對我的工具有一些有趣的行爲。該工具的工作包括從數據庫中獲取給定類的實例並操作其某些屬性。它是一個通用工具,因爲它被開發爲可重用的,並且我們有一大組實體類(但不是所有實體類)實現該接口(主要是那些模擬某些類型的正在運行的業務任務的實體)。如何獲取給定實體類的PersistenceUnit名稱?
要做這個工具的工作,我需要得到給定類的EntityManager
。要獲得EntityManager
,我需要一個EntityManagerFactory
。要獲得EntityManagerFactory
,我需要持久性單元名稱。
所以,我的問題是,給定一個實體類,獲取其持久性單元的名稱。然而,我沒有找到任何方法來做到這一點,沒有一個已經存在的持久性單元的EntityManager,它會創建一個雞或雞蛋第一,鑰匙鎖在胸前的問題。
部分解決方案是將持久單元的名稱與實體類一起傳遞,但這看起來是錯誤的,因爲應該從給定的類推斷(或至少猜測)持久單元的名稱。這可以優化爲像名稱在實體類的註釋中,但這看起來仍然不合適。搜索和分析persistence.xml
文件是我們真正想要避免的。
那麼,我能做些什麼來解決這個問題?有任何想法嗎?
您是否發現在此處張貼的其他選擇?我有同樣的困境。 – davidmontoyago 2011-12-15 20:49:47
@davidmontoyago:我完成了基於羅賓的答案的東西。 – 2011-12-20 16:23:13