2011-01-18 12 views
5

Ho quanto segue in persistence.xmlhibernate unit test JPA autodection non funziona

<persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> 
    <class>com.merc.model.log.EventLogging</class> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
     <!-- Scan for annotated classes and Hibernate mapping XML files --> 
     <property name="hibernate.archive.autodetection" value="class"/> 
    </properties> 
</persistence-unit> 

Se io commento com.merc.model.log.EventLogging, ottengo un'eccezione un'entità sconosciuta.

Tutte le idee sul perché il rilevamento automatico non avrebbe funzionato

risposta

13

Ciò può essere causato dal fatto che di default rilevamento automatico funziona per le classi all'interno dello stesso elemento percorso di classe in cui si trova persistence.xml.

Quindi, si dispone di cartelle di destinazione separate per il codice stesso e per i test (ad esempio, se si utilizza Maven con configurazione predefinita) e se questo persistence.xml finisce nella cartella di destinazione dei test dopo la compilazione, le classi dal la cartella di destinazione non verrebbe rilevata.

È possibile utilizzare gli elementi <jar-file> per puntare ad altri oggetti del percorso di classe che devono essere cercati per le entità.

Se si utilizza Maven, è possibile farlo in modo elegante con il filtraggio delle risorse:

persistence.xml:

<jar-file>${project.build.outputDirectory}</jar-file> 

pom.xml:

<build> 
    <testResources> 
     <testResource> 
      <directory>src/test/resources</directory> 
      <filtering>true</filtering> 
     </testResource> 
    </testResources> 
</build> 
+0

Grazie per l'aiuto e la spiegazione – user373201

+0

I ho provato quello che hai menzionato, ma ora ho il seguente errore. Sto usando Maven e sto provando ad eseguire un test unitario - Impossibile analizzare l'unità di persistenza dall'URL [file: /media/01CB9CAC704E03A0/Projects/spring/hibernate/genericdao/target/test-classes/META-INF/persistence.xml] – user373201

+0

@ user373201: Controlla come questo 'persistence.xml' si occupa della compilazione, Maven ha risolto il segnaposto? – axtavt