Hibernate + Spring MVC: конфигурация отображения объектов

Есть ли способ определить объекты в hibernate.cfg.xml по объему, а не по одному?

Например, в Spring вы можете определить все контроллеры с помощью такой аннотации:

<context:component-scan base-package="crm.controller" />

Могу ли я определить классы спящего режима таким же образом? Или он должен быть определен один за другим?

Спасибо

Ответ 1

Если вы используете Spring MVC, вы можете настроить его при настройке sessionFactory. Если вы используете файлы hbm:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
        <list>
            <value>file1.hbm.xml</value>
            <value>file2.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties" ref="hibernateProperties"/>
</bean>

Если вы используете аннотированные классы:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.me.domain">
    <property name="hibernateProperties" ref="hibernateProperties"/>
</bean>

Ответ 2

Попробуйте использовать:

<mapping package="com.mycompany.model" />

вместо набора элементов:

<mapping class="com.mycompany.model.EntytyOne" />
<mapping class="com.mycompany.model.EntytyTwo" />

Ответ 3

Почему бы вам не попробовать это. У меня это настроено в springDAOcontext.xml

<bean id="csiSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
       <value>classpath:hibernate/hibernate.cfg.xml</value>
    </property>
    <property name="dataSource" ref="DataSource"/>

    <property name="mappingResources">
        <list>
            <value>hibernate/*</value>
                     </list>
                     <property>

Ответ 4

Насколько я помню, Hibernate, поскольку он находится вне коробки, не поддерживает "пакетное разрешение", чтобы обнаружить ваши классы домена.

Но учитывая, что вы интегрируете Hibernate с Spring MVC, вы можете аннотировать ваши классы (стандартные JPA + Hibernate конкретные аннотации) и в вашем конфигурационном файле конфигурации Spring указать пакет, содержащий классы сущностей Hibernate. Вот как я настроил его в предыдущем проекте:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="org.springmvc.domain" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="show_sql">true</prop>
            <prop key="log_level">DEBUG</prop>
        </props>
    </property>
</bean>

Свойство "packagesToScan" определяет пакеты, в которых Spring будет иметь Hibernate-сканирование, чтобы обнаружить классы сущностей.

Ответ 5

im использовать jpa annotation @Entity, код приложенияContext.xml:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.yourcompany.module" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        </props>
    </property>
</bean>

Путь к пакету "com.yourcompany.module" - это ваш пакет объектов Java, например:

package com.yourcompany.module;
@Entity
class MyEntity{
    private Long id;
    set get...
}