【问题标题】:Hibernate + Spring MVC: objects mapping configurationHibernate + Spring MVC:对象映射配置
【发布时间】:2012-02-13 13:57:27
【问题描述】:

有没有办法在hibernate.cfg.xml中按范围而不是一个一个地定义对象?

例如在Spring中你可以通过这样的注解来定义所有的控制器:

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

我可以用同样的方式定义休眠类吗?还是必须一一定义?

谢谢

【问题讨论】:

标签: java hibernate spring-mvc


【解决方案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 不支持“package-sanning”来发现您的域类。

      但鉴于您正在将 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】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          相关资源
          最近更新 更多