2017-09-16 30 views
7

Spring ORM ile birlikte Hazırda Beklet 5 (5.2.11) kullanmayı deniyorum.org.hibernate.UnknownEntityTypeException: Bulunamadı: persity.Settings

ardından öğreticiler aşağıdaki yapılandırma ile geldi:

Bahar Bean

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

Hazırda (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> 

Bu yapılandırma, bir yol açar org.hibernate.UnknownEntityTypeException: Unable to locate persister: entity.Settings.

Ancak, en kısa sürede hibernate.cfg.xml içine tüm

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

özelliklerini taşımak ve ben

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

her şeyi Bahar yapılandırmasını değiştirmek olarak çalışıyor.

Neyi yanlış yaptığımı biliyormusunuz?

PS: Bağımlılıklar: Ben hazırda ve bahar kullandığınızda

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

Yazdığınız yapılandırmayı hiç görmedim. Ben her zaman veya hazırda cfg dosyasını veya bahar hazırda bekletme yapılandırmasını kullandım. Varlık sınıfı listesini yay yapılandırmasının içine koymaya çalıştınız mı? –

+0

Ayrıca, varlık sınıfının yay yapılandırmasının içinde olması gerektiğini de düşündüm. Ama nasıl? – Hannes

cevap

2

Genellikle yapılandırma bu tür kullanın: my özellikleri, daha sonra, bir özellik dosyası

kullanılarak yüklenen tüm

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

Ben faydalı

Angelo

umut
2

Spring belgelerine göre, hazırda bekletme yapılandırma dosyası değil, HBM eşleme dosyaları sağlamak için LocalSessionFactoryBean#setMappingResources yöntemi kullanılmalıdır (ör. hibernate.cfg.xml).

Bu yüzden çalışmıyor. Ancak, configLocation özelliğini kullandığınız anda, işe yarar, çünkü hazırda bekletme yapılandırma dosyasını sağlama amaçlı bir yöntemdir.

Şimdi, muhtemelen ek açıklamaları kullandığınız için, setMappingResources'u kullanmanız gerekmez. Yalnızca, Hazırda bulunan eşlemelerini sağlamak için XML_based HBM dosyalarını kullanmak istiyorsanız gerekir.

Bunun için ihtiyacınız olan LocalSessionFactoryBean#setAnnotatedClasses. Ya da sadece entities klasörünü vermenize izin veren setPackagesToScan ve içerideki tüm varlık sınıfları kaydedilecektir.

Daha fazla ayrıntı için my book, High-Performance Java Persistence, GitHub repository'a bakın.

+0

Ek açıklamaları kullanıyorum ama yine de sınıfları bir yere kaydetmem gerektiğini düşündüm. Hazırda bekletme için herhangi bir yapılandırma kullanmazsam, o da işe yaramaz ... – Hannes

+0

Cevabımda açıkladığım gibi 'setAnnotatedClasses 'kullanın. –