2013-07-30 17 views
11

Chciałbym skorzystać z adnotacji JPA @Entity, aby nie zadeklarować jednostek klas pliku persistence.xml J2SE. Co chciałbym uniknąć:Czy istnieje sposób skanowania jednostek JPA, aby nie zadeklarować trwałych klas w pliku 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> 

A oto co moje rzeczywiste persistence.xml wyglądają podobnie

<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> 

Czy istnieje standardowy sposób skanowania podmioty WZP w pliku persistence.xml od wewnątrz moduł JAR? Czy istnieje niestandardowy sposób hibernacji służący do skanowania obiektów JPA w pliku persistence.xml z poziomu modułu JAR?

Odpowiedz

14

-Upewnij się, że twoje encje i persistence.xml kończą się w tej samej ścieżce klasy podczas budowania słoika.

Podmioty nie mogą być skanowane, jeśli znajdują się w innej ścieżce klasy. Jeśli musisz mieć je w różnych ścieżkach klasycznych, jest to jedna sztuczka, którą widziałem, aby zadziałać: No autodetection of JPA Entities in maven-verify.

Jeśli nie masz pewności, gdzie się kończy, możesz rozpakować plik .jar i szczyt. To jest rozpakowany projekt wytrwałość internetowej:

Unpacked Web Persistence JAR

Wskazówka moje zajęcia są w dół katalogu com, a mój persistence.xml znajduje się w katalogu META-INF. Obie są w tej samej klasie ścieżki klas, więc funkcja automatycznego skanowania będzie działać.

- Ustaw właściwość hibernate.archive.autodetection.

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

-Dodaj false do utrwalania jednostce

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

Mam nadzieję, że jeden z nich będzie pracować dla Ciebie.

+0

Tak to wygląda, ale nie działa w moim przypadku. \t Oto definicja właściwości hibernate.archive.autodetection: "Określ, który element jest automatycznie wykryty przez menedżera jednostek hibernacji podczas analizowania archiwum .par (domyślnie jest to klasa, hbm).". Ale czym jest archiwum .par? Nigdy nie słyszałem o takim arhive. – 1tox

+0

UWAGA: Zaktualizowałem oryginalny wpis – 1tox

+0

. Archiwum .par to plik archiwum trwałości, w którym można powiązać jednostki i plik persistence.xml. Nie jest to wymagane, więc nie martw się o to (patrz ostatni post od członka zespołu Hibernate tutaj: https://forum.hibernate.org/viewtopic.php?f=9&t=947671). Inną propozycją byłoby dodanie: false do twojej jednostki-trwałości. – Cody