2015-10-03 54 views
1

這是參照JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automaticallyUnable to call Hibernate/QueryDSL from another maven subproject如何使用集成服務在Hibernate中5添加註釋類

似乎休眠4有一個偉大的方式來動態加載實體類使用 org.hibernate.integrator.spi 。整合者服務。

現在使用Hibernate 5時,在集成接口的集成方法給我

public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory, 
     SessionFactoryServiceRegistry serviceRegistry) 
{ 

} 

哪裏元數據類型的org.hibernate.boot.Metadata

我無法呼叫addAnnotatedClass(),無論是我能夠獲得休眠4中原來的配置對象。

我該如何解決這個問題?

我正在使用maven和碼頭。

我沒有使用彈簧(所以請不要提供任何基於彈簧的解決方案)

回答

0

這實際上涉及到的東西,我用週末搏鬥被逮住基於Hibernate 5.您可以閱讀有關在latest Javadoc for Hibernate 4中有關Configuration類的計劃更改。獲取所有已加載實體類(包括帶註釋實體)信息的新位置是您提到的Metadata類。它有一個getEntityBindings()方法,該方法將返回已知所有實體的實體元數據表示形式PersistentClass。但是這個Collection是不可變的。

建議您重新考慮使用Integrator在運行時添加實體綁定。這可能在過去有效,但文檔明確指出,這不是故意的,因爲這應該在初始化時完成。 MetadataSessionFactoryImplementor一旦建成就大部分是不可變的,因此Integrator的預期用途不是修改這些配置項目,而是將它們用作有關如何使用SessionFactoryServiceRegistry配置新Service集成的信息。

如果你覺得找工作是惱人的配置Session找到所有你在運行時註釋類,我建議你嘗試使用EntityManagerFactory方法用於初始化Hibernate的,因爲它是更簡單,使用標準的JPA語法,可以如果您需要的話,可以轉向少數其他供應商。這將代表您自動掃描帶註釋的實體。這個API有點簡單和有限,但如果你真的需要本地Hibernate特定功能的強大功能,那麼有一種方法來access the native underlying API