Hibernate + Spring MVC:对象映射配置

时间:2012-02-13 13:57:28

标签: java hibernate spring-mvc

有什么方法可以按范围在hibernate.cfg.xml中定义对象而不是逐个定义?

例如,在Spring中,您可以通过这样的注释定义所有控制器:

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

我可以用同样的方式定义hibernate类吗?或者它必须逐个定义?

谢谢

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

尝试使用:

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

而不是一组元素:

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

答案 2 :(得分:0)

为什么不尝试这个。我在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>

答案 3 :(得分:0)

据我所知,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进行扫描以发现实体类的包。

答案 4 :(得分:0)

我使用jpa annotation @ 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...
}