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