2013-07-30 1 views
11

Ich möchte JPA @Entity-Annotationen nutzen, um Klasseneinheiten nicht als J2SE-Datei persistence.xml zu deklarieren. Was würde Ich mag zu vermeiden:Gibt es eine Möglichkeit, JPA-Entitäten zu scannen, um persistente Klassen nicht in einer Datei persistence.xml zu deklarieren?

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

und hier ist das, was meine eigentliche 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> 

Gibt es eine Standardmethode von innen in einer persistence.xml Datei zu scannen JPA-Entitäten gleich aussehen ein JAR-Modul? Gibt es eine nicht standardmäßige Hibernate-Möglichkeit zum Scannen von JPA-Entitäten in einer Datei persistence.xml aus einem JAR-Modul?

Antwort

14

- Stellen Sie sicher, dass Ihre Entitäten und persistence.xml beim Erstellen des JARs im selben Klassenpfad landen.

Die Entitäten können nicht gescannt werden, wenn sie sich in einem anderen Klassenpfad befinden. Wenn Sie sie in verschiedenen Klassenpfaden sitzen müssen, gibt es einen Trick, den ich gesehen habe, damit es funktioniert: No autodetection of JPA Entities in maven-verify.

Wenn Sie nicht sicher sind, wo die Dinge enden, können Sie die .jar-Datei und den Peak dekomprimieren. Dies ist eine ausgepackt Persistenz Webprojekt:

Unpacked Web Persistence JAR

Hinweis meiner Klassen auf dem com-Verzeichnis sind, und mein persistence.xml ist im Verzeichnis META-INF. Beide Klassen befinden sich im selben Klassenpfad, also wird Autoscan funktionieren.

- Legen Sie die Eigenschaft hibernate.archive.autodetection fest.

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

-Add falsch auf die Persistenz-Einheit

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

Hoffentlich einer von denen, die Arbeit für Sie.

+0

Ja, es sieht so aus, aber in meinem Fall funktioniert es nicht. \t Hier ist die Definition der Eigenschaft hibernate.archive.autodetection: "Bestimmen Sie, welches Element vom Hibernate-Entity-Manager beim Analysieren des .par-Archivs automatisch erkannt wird. (Standard: class, hbm)". Aber was ist ein .par-Archiv? Ich habe noch nie von einem solchen Arhive gehört. – 1tox

+0

NB: Ich habe den ursprünglichen Post aktualisiert – 1tox

+0

Das .par-Archiv ist Persistenz-Archivdatei, in der Ihre Entitäten und persistence.xml gebündelt werden können. Es ist nicht erforderlich, also machen Sie sich keine Sorgen (siehe den letzten Post von einem Hibernate Teammitglied hier: https://forum.hibernate.org/viewtopic.php?f=9&t=947671). Ein weiterer Vorschlag wäre, false zu Ihrer Persistenzeinheit hinzuzufügen. – Cody

Verwandte Themen