hibernate 4 sessionfactory packagestoscan свойство использования

У нас есть веб-приложение на основе Spring 3.2.4 и Hibernate 4.2.3. Он был сгенерирован с использованием архетипа appfuse 2.2.1. Согласно доступной документации, мы можем использовать свойство packagesToScan SessionFactory для динамического выбора классов сущностей и настройки sessionFactory. Однако мы сталкиваемся с проблемой, что мы должны явно указать имя класса сущности в hibernate.cfg.xml, чтобы он был распознан hibernate. На форумах подходящих ответов не нашел, поэтому пишу здесь. Возможно, мое понимание того, как это работает, может быть неправильным, поэтому любые указатели приветствуются.

Спасибо

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans -- namespace declarations here
       default-lazy-init="true">
     <!-- Activates scanning of @Autowired -->
     <context:annotation-config/>
     <!-- Activates scanning of @Repository and @Service -->
     <context:component-scan base-package="com.xyz"/>
</beans>

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
    <session-factory>
       <mapping class="com.xyz.model.Address" />
       <mapping class="com.xyz.model.Company" />
       <mapping class="com.xyz.model.CompanyBilling" />
       <!-- BIG LIST OF MY ENTITY CLASSES -->
    </session-factory>
 </hibernate-configuration>

applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans -- namespace declarations here
      default-lazy-init="true">
    <bean class="org.springframework.orm.hibernate4.HibernateExceptionTranslator"/>
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" destroy-method="destroy">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="hibernateProperties">
            <props>
                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                 <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
                 <prop key="hibernate.cache.use_second_level_cache">true</prop>
                 <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
            </props>
        </property>
        <property name="packagesToScan"><list><value>com.xyz.model</value></list></property>
    </bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    <bean id="transactionManager"  class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- Activates scanning of @Autowired -->
    <context:annotation-config/>
    <!-- Activates scanning of @Repository -->
    <context:component-scan base-package="com.xyz.dao"/>
</beans>

Company.java

 package com.xyz.model;
 // imports
 @Entity
 @Table(name = "company")
 @SQLDelete(sql = "UPDATE company SET activeFlag = 0, lastupdated=now() WHERE id = ?")
 @Where(clause = "1=activeflag")
 @Component
 public class Company extends BaseEntity implements java.io.Serializable {
    // properties and getter setters
 }

person Pragmatic    schedule 18.12.2013    source источник
comment
Какую @Entity аннотацию вы используете?   -  person M. Deinum    schedule 05.01.2015
comment
@m-deinum import javax.persistence.Entity;   -  person Pragmatic    schedule 07.01.2015
comment
Вы пробовали без hibernate.cfg.xml. Если он у вас был раньше (пустой), это может отменить отсканированные объекты. Просто интересно, почему в вашей сущности есть @Component, это не имеет смысла.   -  person M. Deinum    schedule 07.01.2015


Ответы (2)


Второе свойство packagesToScan указывает, что пакет Java должен автоматически сканировать аннотированные классы сущностей. Таким образом, больше не нужно готовить файл сопоставления Hibernate.

person Huyền Vũ    schedule 14.07.2016

Изменять:

<property name="packagesToScan"><list><value>com.xyz.model</value></list></property>

To:

<property name="packagesToScan" value="com.xyz.model" />

Это работает для меня.

person pratham    schedule 18.11.2014