2016-04-26 15 views
2

Spring Data JPAはテストを実行中にエンティティを認識しません。以下のコードを見つけてください。 Springブートは使用しません。spring-data-jpa: - 管理されていないタイプエラー

JPA設定ファイル(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> 

リポジトリ

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

エンティティ

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

    @Id 
    private Integer id; 

    @Column 
    private String description; 
} 

永続

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

試験

@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(){ 

    } 
} 

アプリケーション・コンテキストをロードしません。私が手にエラーが発生しました、私はDBに接続すると、テーブルが存在することができる午前

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 

です。なぜこれが起こるのですか?

UPDATE 1

エンティティがPersistence.xml<class>として追加される場合、これは動作しているようです。問題は何永続ユニットがLocalContainerEntityManagerFactoryに定義されていない場合にのみ使用されているエンティティに対してpackagesToScan

答えて

2

LocalContainerEntityManagerFactoryBeanの走査であると思われます。永続クラスを含まない永続ユニットを定義することで、Hibernateはクラスについて何も知らないことになります。

persistence.xmlは、すでにLCEMFBで利用可能な設定を複製するだけで冗長であるようです。私はそれを削除し、エンティティをSpringがスキャンするように勧めます。

+0

ありがとうございました。これは今私のために働いています。しかし、実際には私が質問したのとまったく同じ設定で動作している実用的なWebアプリケーションがあります。このエラーは、テストの場合にのみ発生します。 Webappではこれがなぜ機能するのか、テストでは動作しないのか分かりませんか? – ArunM

+0

これをもう一度チェックして、上の質問とまったく同じ構成の動作中のアプリケーションがあることを確認できます。これは奇妙に思えますが、好奇心の中でテストやWebアプリケーションのためにさまざまなやり方で行動する方法を知りたいと思っています。 – ArunM

関連する問題