Hibernate + Spring MVC: конфигурация отображения объектов - PullRequest
10 голосов
/ 13 февраля 2012

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

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

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

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

Спасибо

Ответы [ 5 ]

1 голос
/ 26 июня 2012

Если вы используете 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>
0 голосов
/ 03 июля 2012

я использую аннотацию jpa @ Entity, код applicationContext.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...
}
0 голосов
/ 24 апреля 2012

Почему бы вам не попробовать это. Я настроил это в 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>
0 голосов
/ 24 апреля 2012

Насколько я помню, 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 для обнаружения классов сущностей.

0 голосов
/ 13 февраля 2012

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

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

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

<mapping class="com.mycompany.model.EntytyOne" />
<mapping class="com.mycompany.model.EntytyTwo" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...