2013-07-30 65 views
11

我想利用JPA @Entity註釋不要聲明類實體是一個J2SE persistence.xml文件。我想什麼來避免:有沒有辦法掃描JPA實體不聲明persistence.xml文件中的持久化類?

<persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.mycompany.entities.Class1</class> 
    <class>com.mycompany.entities.Class2</class> 
    <class>com.mycompany.entities.Class3</class> 
</persistence-unit> 

這裏是我實際的persistence.xml看起來很像

<persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <!-- Scan for annotated classes and Hibernate mapping XML files --> 
     <property name="hibernate.archive.autodetection" value="class, hbm" /> 
     <property name="hibernate.cache.use_second_level_cache" value="false" /> 
     <property name="hibernate.cache.use_query_cache" value="false" /> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    </properties> 
</persistence-unit> 

是否有從內部掃描JPA實體persistence.xml文件的標準方式一個JAR模塊? 是否存在一種非標準的Hibernate方法來從JAR模塊內部掃描persistence.xml文件中的JPA實體?

回答

14

- 確保您的實體和persistence.xml最終在相同的類路徑中,當你建立你的jar。

如果實體坐在另一個類路徑中,則無法掃描它們。如果你需要讓他們坐在不同的課程路徑中,可以使用我見過的一個技巧:No autodetection of JPA Entities in maven-verify

如果你不確定事情的結局,你可以解壓縮.jar文件和峯值。這是一個解壓的持久性web項目:

Unpacked Web Persistence JAR

通知我的課是向下com目錄,而我的persistence.xml是在META-INF目錄下。兩者都在相同的「類」類路徑中,所以自動掃描將起作用。

- 設置hibernate.archive.autodetection屬性。

<!-- Scan for annotated classes and Hibernate mapping XML files --> 
<property name="hibernate.archive.autodetection" value="class, hbm" /> 

- 添加假的持久性單元

<persistence-unit name=...> 
<exclude-unlisted-classes>false</exclude-unlisted-classes> 
    ... 

希望這些會爲你工作之一。

+0

是的,它看起來像這樣,但它不適用於我的情況。 \t以下是屬性hibernate.archive.autodetection的定義:「確定在解析.par歸檔文件時由Hibernate Entity Manager自動發現哪個元素(默認爲class,hbm)。」。但什麼是.par檔案?我從來沒有聽說過這樣一個arhive。 – 1tox

+0

注意:我已更新原始帖子 – 1tox

+0

.par存檔是持久性存檔文件,您的實體和persistence.xml可以捆綁在一起。這不是必需的,所以不要擔心(請參閱Hibernate團隊成員的最後一篇文章:https://forum.hibernate.org/viewtopic.php?f = 9&t = 947671)。另一個建議是將 false添加到你的持久性單元。 – Cody

相關問題