2012-02-13 130 views
10

有没有什么方法可以按范围定义hibernate.cfg.xml中的对象,而不是一个接一个?Hibernate + Spring MVC:对象映射配置

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

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

我能否以同样的方式定义Hibernate类?或者它必须一个接一个地定义?

感谢您使用

+0

相关的问题: http://stackoverflow.com/q/1413190/211197 http://stackoverflow.com/q/2419802/211197 – maksimov 2012-04-06 14:20:21

回答

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> 
0

尝试:

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

,而不是一组元素:

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

我 – nKognito 2012-02-13 14:48:19

+0

不工作,你能否提供更多细节?你在日志中遇到任何错误?你可以在这里粘贴它们吗? – 2012-02-13 22:50:29

+0

当我使用映射包时,它给我实体找不到错误 – nKognito 2012-02-14 03:58:58

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> 
0

据我记得,休眠,因为它是外的箱子,不支持“包sanning”发现你的域类。但是考虑到您将Hibernate与Spring MVC集成在一起,您可以在您的Spring上下文配置文件中注释您的类(标准JPA + Hibernate特定注释)并指定包含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”属性定义春天将有Hibernate的扫描,以发现实体类的包。

0

IM使用JPA注解@实体,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... 
}