2010-03-10 135 views
1

我們有這個hibernate.cfg.xml文件。有沒有辦法告訴Hibernate只是掃描一個目錄,而不必爲每個類添加一個條目?休眠配置 - 會話工廠掃描?

<hibernate-configuration> 
    <session-factory> 
     <mapping class="com.abc.domain.model.A" /> 
     <mapping class="com.abc.domain.model.B" /> 
     <mapping class="com.abc.domain.model.C" /> 
     <mapping class="com.abc.domain.model.D" /> 
     <mapping class="com.abc.domain.model.E" /> 
    </session-factory> 
</hibernate-configuration> 
+0

,如果你是在談論Java的Hibernate或者.NET NHibernate的位置目前還不清楚......我猜測nhibernate標籤是不正確的? – 2010-03-10 19:48:50

+0

右鍵 - 修正了這個問題。 – 2010-03-10 19:50:45

回答

2

那麼呢?

<mapping assembly="SomeAssemblyName" /> 
0

NHibernate的最佳做法是在構建ISessionFactory API之前僅將配件添加到配置中。

羅伯特沒有指出它的元素。

另一種方法是如下執行運行時配置:

Configuration cfg = new Configuration(); 
cfg.AddAssembly(typeof(OneOfYourDomainType).Assembly.Name); // Or something like that by memory. 
cfg.Configure(); 
static ISessionFactory sessionFactory = cfg.BuildSessionFactory(); 

使得ISessionFactory靜是很重要的,因爲它是實例非常昂貴。

typeof(OneOfYourDomainType).Assembly.Name返回包含所有域對象的程序集的名稱,並帶有正確的映射。然後,添加這個,您添加程序集,並且您不需要一次又一次地爲您的域類型重複該過程。

3

要獲得發現機制,您需要使用Hibernate EntityManager實現Java Persistence標準發現機制。否則,你需要列出你的課程。

0

Tapestry使用實用工具類來檢查類路徑,以找到包含所有Hibernate註釋類的包,然後檢查磁盤上的文件以獲取類名。如果您可以將它們都放在一個包中(或者願意編寫更復雜的類路徑實用程序),那麼您可以全部找到它們,然後調用configuration.addAnnotatedClass(cls)。有一些警告,例如,你不能太喜歡外部的罐子,裝載定製裝載機的類等,但對於標準的情況,它工作正常。

你可以看看Tapestry是如何在這裏執行的:http://www.java2s.com/Open-Source/Java-Document/Library/Tapestry/org/apache/tapestry/internal/services/ClassNameLocatorImpl.java.htm雖然這可能會引入其他Tapestry特定的類。

1

我正在尋找類似的解決方案,並從另一個question here找到答案。 你應該使用彈簧來完成這項工作。

  1. 創建擴展 AnnotationSessionFactoryBean
  2. 從複製的鏈接代碼的類 EntityScannerSessionFactoryBean(它是一個偉大的回答,請務必閱讀它)。給你的新班級。
  3. 添加下面的代碼,將該類映射爲應用程序上下文中的sessionFactory。

    豆ID = 「SessionFactory的」 類= 「com.foo.EntityScannerSessionFactoryBean」>