2011-01-18 12 views
5

Mam następujący w persistence.xmlhibernacji testy jednostkowe JPA autodection nie działa

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

Gdybym wykomentuj com.merc.model.log.EventLogging, otrzymuję wiadomo wyjątek podmiotu.

Wszelkie pomysły, dlaczego autodetekcja nie będzie działać

Odpowiedz

13

Może to być spowodowane faktem, że domyślnie autodetekcja pracuje dla klas wewnątrz samego elementu ścieżki klasy, gdzie znajduje się persistence.xml.

Masz więc oddzielne foldery docelowe dla samego kodu i dla testów (na przykład, jeśli używasz Mavena z domyślną konfiguracją), i jeśli ten persistence.xml kończy się w folderze docelowym testów po kompilacji, klasy z głównego folder docelowy nie zostanie wykryty.

Możesz użyć elementów <jar-file>, aby wskazywać inne elementy ścieżki klasy, które powinny być wyszukiwane w poszukiwaniu elementów.

Jeśli używasz Maven, można zrobić to w elegancki sposób za pomocą filtrowania zasobów:

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

Dziękuję za pomoc i wyjaśnienia – user373201

+0

I wypróbowałem to, o czym wspomniałeś, ale teraz dostaję następujący błąd. Używam programu maven i próbuję uruchomić test jednostki - Nie można zanalizować jednostki trwałości z adresu URL [file: /media/01CB9CAC704E03A0/Projects/spring/hibernate/genericdao/target/test-classes/META-INF/persistence.xml] – user373201

+0

@ user373201: Sprawdź, jak ten plik 'persistence.xml' wygląda po kompilacji, czy Maven rozwiązał symbol zastępczy? – axtavt