2017-09-16 18 views
7

Spring ORM과 함께 최대 절전 모드 5 (5.2.11)를 사용하려고합니다.org.hibernate.UnknownEntityTypeException : persistister : entity.Settings를 찾을 수 없습니다.

다음 자습서 나는 다음과 같은 구성 해낸 :

봄 콩

<bean id="sessionFactorySettings" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.connection.driver_class">org.h2.Driver</prop> 
      <prop key="hibernate.connection.url">jdbc:h2:~/.dummy/settings</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
    <property name="mappingResources"> 
     <list> 
      <value>/hibernate.cfg.xml</value> 
     </list> 
    </property> 
</bean> 

가 최대 절전 모드가 (있는 hibernate.cfg.xml)

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <mapping class="entity.Settings"/> 
    </session-factory> 
</hibernate-configuration> 

이 구성은 리드 org.hibernate.UnknownEntityTypeException: Unable to locate persister: entity.Settings.

그러나, 최대한 빨리 있는 hibernate.cfg.xml에 모든

<prop key="hibernate.xxx">..</prob> 

속성을 이동하고 내가

<bean id="sessionFactorySettings" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
     <property name="configLocation" value="/hibernate.cfg.xml"/> 
</bean> 

모든 것을 Spring 설정을 변경하면 잘 작동합니다.

내가 뭘 잘못했는지 알 수 있습니까?

PS : 종속 관계 : I 최대 절전 모드와 스프링을 사용하는 경우

dependencies { 
    compile 'ch.qos.logback:logback-classic:1.2.3' 
    compile 'org.springframework:spring-context:4.3.11.RELEASE' 
    compile 'org.springframework:spring-jdbc:4.3.11.RELEASE' 
    compile 'org.springframework:spring-orm:4.3.11.RELEASE' 
    compile 'org.hibernate:hibernate-core:5.2.11.Final' 
    compile 'org.hibernate:hibernate-java8:5.2.11.Final' 
    compile 'org.apache.commons:commons-dbcp2:2.1.1' 
    compile 'com.h2database:h2:1.4.196' 
} 
+1

작성한 설정을 본 적이 없습니다. 필자는 항상 최대 절전 모드 cfg 파일 또는 봄 최대 절전 모드 구성을 사용했습니다. 엔티티 클래스 목록을 스프링 구성 안에 넣으려고 했습니까? –

+0

엔티티 클래스가 스프링 구성 내부에 있어야한다고 생각했습니다. 그러나 어떻게? – Hannes

답변

2

내가 일반적으로 이러한 종류의 구성을 사용 : 내 속성, 다음, 프로퍼티 파일

을 사용하여로드되는 모든

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="hibernateDatasource" /> 
    <!-- HERE YOU HAVE TO PUT THE PACKAGE 
     WHERE YOUR ENTITY CLASS ARE LOCATED 
     (I mean classes annotated with @Entity annotation --> 
    <property name="packagesToScan" value="hibernate.models" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       ${hibernate.props.db.dialect} 
      </prop> 
      <prop key="hibernate.show_sql"> 
       ${hibernate.props.db.show.sql} 
      </prop> 
      <prop key="hibernate.generate_statistics"> 
       ${hibernate.props.db.generate.statistics} 
      </prop> 
      <prop key="hibernate.format_sql"> 
       ${hibernate.props.db.format.sql} 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto"> 
       ${hibernate.props.db.ddl.instr} 
      </prop> 
      <prop key="hibernate.cache.use_second_level_cache">${hibernate.props.db.use.cache}</prop> 
      <prop key="hibernate.cache.use_query_cache">${hibernate.props.db.use.query.cache}</prop> 
      <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory 
      </prop> 
      <prop key="net.sf.ehcache.configurationResourceName">hibernateEhCacheCfg.xml</prop> 
      <prop key="hibernate.jdbc.batch_size">${hibernate.props.db.jdbc.batch.size}</prop> 
      <prop key="hibernate.jdbc.use_streams_for_binary">true</prop> 
     </props> 
    </property> 
</bean> 

유용하게 사용하시기 바랍니다.

Angelo

2

Spring 문서에 따르면, HBM 매핑 파일을 제공하기 위해 LocalSessionFactoryBean#setMappingResources 메서드를 사용해야하며 Hibernate 구성 파일 (예 : hibernate.cfg.xml).

그것이 작동하지 않는 이유입니다. 그러나 configLocation 속성을 사용하자마자 Hibernate 특정 구성 파일을 제공하기위한 의도 된 방법이기 때문에 작동합니다.

이제 주석을 사용하기 때문에 setMappingResources을 전혀 사용할 필요가 없습니다. XML_ 기반의 HBM 파일을 사용하여 Hibernate 매핑을 제공하려는 경우에만 필요합니다.

필요한 것은 LocalSessionFactoryBean#setAnnotatedClasses입니다. 또는 setPackagesToScan 폴더에 entities 폴더와 모든 엔티티 클래스를 제공 할 수 있습니다.

자세한 내용은 my book, High-Performance Java Persistence, GitHub repository을 확인하십시오.

+0

특수 효과를 사용하지만 어딘가에서 수업을 등록해야한다고 생각했습니다. 내가 최대 절전 모드로 설정을 사용하지 않는다면 잘 동작하지 않을 것입니다 ... – Hannes

+0

제 대답에 설명 된대로'setAnnotatedClasses'를 사용하십시오. –