2016-04-26 10 views
2

Spring Data JPA erkennt meine Entität beim Ausführen von Tests nicht. Bitte finden Sie den Code unten. Wir verwenden keinen Spring Boot.spring-data-jpa: - Kein verwalteter Typ Fehler

JPA Config File (JPAConfigration_Test.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/tx 
          http://www.springframework.org/schema/tx/spring-tx.xsd 
          http://www.springframework.org/schema/data/jpa 
          http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 
    <!--Configing Core JPA Repositories--> 
    <jpa:repositories base-package="org.test.repository" entity-manager-factory-ref="entityManagerFactory_core" transaction-manager-ref="transactionManager"/> 
    <!-- Configring Core Data Resource--> 
    <bean id="DS_TEST" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton"> 
     <property name="jndiName" value="java:comp/env/jdbc/ladvice_service" /> 
     <property name="resourceRef" value="true" />   
    </bean> 
    <!--Configring Core System Entity Manager--> 
    <bean id="entityManagerFactory_core" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceXmlLocation" value="classpath:config/persistence.xml" /> 
     <property name="persistenceUnitName" value="LA_Persistence" />   
     <property name="dataSource" ref="DS_TEST" /> 
     <property name="packagesToScan" value="org.test.model" /> 
     <property name="jpaProperties"> 
      <props> 

       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
       <!-- always puts logging out to the console...we want it in the log file --> 
       <prop key="hibernate.connection.show_sql">false</prop> 
       <prop key="hibernate.hbm2ddl.auto">none</prop> 
       <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> 
       <prop key="hibernate.cache.use_second_level_cache">false</prop> 
       <prop key="hibernate.cache.use_structured_entries">true</prop> 
       <prop key="hibernate.cache.use_query_cache">false</prop> 
       <prop key="hibernate.generate_statistics">true</prop> 
       <prop key="hibernate.default_batch_fetch_size">500</prop> 
       <prop key="hibernate.max_fetch_depth">5</prop> 
       <prop key="hibernate.jdbc.batch_size">1000</prop> 
       <prop key="hibernate.use_outer_join">true</prop> 
      </props> 
     </property> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="false" /> 
       <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" /> 
      </bean> 
     </property> 
    </bean> 
    <!--Confirgring Core Transaction Manager--> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory_core" /> 
    </bean> 
</beans> 

Repository

public interface DemoRepository extends JpaRepository<Demo, Integer> {} 

Entity

@Entity 
@Table(schema="TESTUSER1") 
public class Demo { 

    @Id 
    private Integer id; 

    @Column 
    private String description; 
} 

Persistence

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="LA_Persistence"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> 
      <property name="hibernate.show_sql" value="false"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
      <property name="hibernate.cache.use_second_level_cache" value="false"/> 
      <property name="hibernate.cache.use_query_cache" value="false"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

-Test

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:spring/JPAConfigration_Test.xml"}) 
public class LegalRequestRepositoryTest{ 

    @BeforeClass 
    public static void initiateJNDI() throws IllegalStateException, NamingException{ 
     SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
     BasicDataSource basicDataSourceLAdvice = new BasicDataSource(); 
     basicDataSourceLAdvice.setDriverClassName("oracle.jdbc.OracleDriver"); 
     basicDataSourceLAdvice.setUsername("TESTUSER1"); 
     basicDataSourceLAdvice.setPassword("TESTUSER1"); 
     basicDataSourceLAdvice.setUrl("jdbc:oracle:thin:@localhost:1521:XE"); 
     builder.bind("java:comp/env/jdbc/ladvice_service" , basicDataSourceLAdvice); 
     builder.activate(); 
    } 

    @Test 
    public void testDEMO(){ 

    } 
} 

schlägt fehl Anwendungskontext zu laden. I-Fehler erhalten, ist

at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
    ... 26 common frames omitted 
Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.test.model.Demo 
    at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200) ~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final] 
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:67) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:173) ~[spring-data-commons-1.9.3.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239) ~[spring-data-commons-1.9.3.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225) ~[spring-data-commons-1.9.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.7.3.RELEASE.jar:na] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) ~[spri 

ich in der Lage bin zu der DB und der Tisch gibt es eine Verbindung. Warum passiert das ?

UPDATE 1

Wenn das Unternehmen als <class> in Persistence.xml dies scheint zu funktionieren hinzugefügt wird. Das Problem scheint mit packagesToScan in LocalContainerEntityManagerFactoryBean

Antwort

2

Scanning für Unternehmen nur dann, wenn keine Persistenzeinheit auf den LocalContainerEntityManagerFactory definiert wird früher. Sie definieren eine Persistenzeinheit, die keine persistenten Klassen enthält, so dass Hibernate letztendlich keine Klassen kennt.

Sie sind insgesamt persistence.xml scheint redundant zu sein, da Sie nur Konfiguration duplizieren, die bereits auf der LCEMFB verfügbar ist. Ich schlage vor, es zu entfernen und Spring nach Entitäten scannen zu lassen.

+0

Danke. Das funktioniert jetzt für mich. Aber wir haben eine funktionierende Web-Anwendung, die tatsächlich mit genau der gleichen Konfiguration läuft, die ich in der Frage gestellt habe. Der Fehler tritt nur bei Tests auf. Haben Sie eine Idee, warum das in einer Webapp funktioniert, aber nicht in Tests? – ArunM

+0

Ich habe das nochmal überprüft und kann bestätigen, dass es eine funktionierende Anwendung mit genau der gleichen Konfiguration wie in der obigen Frage gibt. Das scheint seltsam, aber aus Neugier möchte wissen, wie sie sich für Test- und Webanwendungen unterschiedlich verhalten. – ArunM

Verwandte Themen