mappingResources和mappingLocations

本文详细解析了在Spring和Hibernate集成时,配置mappingResources与mappingLocations的区别与使用场景,指出一个常见的错误案例并解释原因。

今天真是可笑啊,在spring和hibernate集成的时候,把hibernate的映射文件路径放到"sessionFactory"配置项中。结果报错,说是:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Error creating bean with name 'sessionFactory' defined in file [E:\soft\Apache Software Foundation\Tomcat 7.0\webapps\ExamSystem\WEB-INF\classes\applicationContext-db.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: class path resource [classpath:com/exam/model/*.hbm.xml] cannot be opened because it does not exist  

我检查了很久,路径没写错啊,怎么会FileNotFound 呢?于是查看jar包有没有少,web.xml 配置有没有写错,折腾了很久都没发现什么问题。百度、google很久也没找到答案。

最后却发现这是一个脑残的错误!我是这么写的:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <property name="mappingResources">  
  2.      <list>  
  3.      <value>classpath:com/exam/model/*.hbm.xml</value>  
  4.      </list>   
  5. </property>   

我完全没注意啊,我以为 mappingResources 里面可以这么写的。后来把“mappingResources ”改成了“mappingLocations”就没问题了。至于它们的区别,摘录一篇文章,地址:http://wukaxi.iteye.com/blog/1401753

内容如下:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations   
  2. 他们的区别:   
  3. 1. mappingResources:指定classpath下具体映射文件名   
  4. <property name="mappingResources">   
  5.     <value>petclinic.hbm.xml </value>   
  6. </property>   
  7. 2. mappingLocations:可以指定任何文件路径,并且可以指定前缀:classpath、file等   
  8. <property name="mappingLocations">   
  9.     <value>/WEB-INF/petclinic.hbm.xml </value>   
  10. </property>   
  11. <property name="mappingLocations">   
  12.     <value>classpath:/com/company/domain/petclinic.hbm.xml </value>   
  13. </property>   
  14. 也可以用通配符指定,'*'指定一个文件(路径)名,'**'指定多个文件(路径)名,例如:   
  15. <property name="mappingLocations">   
  16.     <value>classpath:/com/company/domainmaps/*.hbm.xml </value>   
  17. </property>   
  18. 上面的配置是在com/company/domain包下任何maps路径下的hbm.xml文件都被加载为映射文件   
  19.   
  20. 3. mappingDirectoryLocations:指定映射的文件路径    
  21.   
  22. <property name="mappingDirectoryLocations">  <list>   
  23.   <value>WEB-INF/HibernateMappings</value>   
  24.   </list>   
  25. </property>   
  26. 也可以通过classpath来指出   
  27. <property name="mappingDirectoryLocations">   
  28.   <list>   
  29.   <value>classpath:/XXX/package/</value>   
  30.   </list>   
  31. </property>  
  32.    
  33.    
<think>好的,我需要解决用户关于Hibernate3与Spring Framework各版本兼容性的问题。首先,我得回顾用户提供的引用内容,看看有没有相关的信息。引用[2]提到Spring Framework3.0.3支持Hibernate3.5.2,引用[4]则涉及Spring4整合Hibernate3的情况。这说明不同版本的SpringHibernate3可能有不同的兼容性要求。接下来,我应该整理不同Spring版本与Hibernate3的兼容情况。比如,Spring3.xHibernate3.5.x的兼容性,可能需要具体版本对应。同时,用户还提到Spring4整合Hibernate3,这可能涉及到一些类库的调整,如引用[4]中的ExpressionEvaluationUtils类被重写,说明可能存在API变化需要处理。然后,我需要考虑用户可能的实际应用场景。例如,他们可能在升级Spring版本时遇到Hibernate3的兼容问题,或者需要选择合适版本的组合来避免冲突。需要给出具体的版本对应表建议的配置,以及常见问题的解决方法,比如依赖管理或配置调整。此外,用户提供的引用中有提到SpringBoot的版本兼容性问题,虽然用户的问题是关于HibernateSpringFramework,但可能Spring Boot的兼容性策略也相关,不过这里需要聚焦在核心框架上。最后,生成相关问题时要围绕Hibernate与Spring的版本搭配、升级注意事项、常见错误处理等,帮助用户深入理解如何解决兼容性问题。需要确保回答结构清晰,分点说明,并引用正确的资料部分作为支持。</think>### Hibernate 3与Spring Framework版本兼容性分析 Hibernate 3与Spring Framework的兼容性主要受两者版本组合及依赖库的影响。以下是具体版本对应关系注意事项: --- #### 1. **Spring Framework 3.x与Hibernate 3.x** - **推荐组合** - $Spring\ 3.0.3$ 支持 $Hibernate\ 3.5.2$[^2],例如通过`LocalSessionFactoryBean`配置。 - $Spring\ 3.2.x$ 兼容 $Hibernate\ 3.6.x$,需使用`org.springframework.orm.hibernate3`包。 - **依赖要求** - 需包含`hibernate-core``hibernate-entitymanager`的3.x版本。 - 避免引入Hibernate 4+的依赖,防止类冲突。 --- #### 2. **Spring Framework 4.x与Hibernate 3.x** - **兼容性** - $Spring\ 4.x$ 官方已弃用`hibernate3`包,但仍支持通过手动配置集成[^4]。 - 需注意部分类库变更(如`ExpressionEvaluationUtils`被移除),需重写或适配[^4]。 - **配置示例** ```xml <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources">...</property> <property name="hibernateProperties">...</property> </bean> ``` --- #### 3. **Spring Framework 5.x及更高版本** - **不兼容性** - $Spring\ 5.x$ 完全移除了`hibernate3`支持,仅支持Hibernate 5+。 - 若需强制使用,需自行实现`SessionFactory`或降级Spring版本。 --- #### 4. **常见问题与解决方案** - **问题1:NoClassDefFoundError(如缺少Hibernate3类)** **原因**:Spring版本过高,未包含`hibernate3`包。 **解决**:显式添加`spring-orm`的3.x或4.x版本依赖。 - **问题2:事务管理失效** **原因**:Hibernate 3与Spring 4+的注解驱动不兼容。 **解决**:改用XML配置事务管理器(如`HibernateTransactionManager`)。 --- #### 5. **版本组合建议** | Spring Framework 版本 | 兼容的Hibernate 3版本 | 注意事项 | |-----------------------|-----------------------|------------------------------| | 3.0.x - 3.2.x | 3.5.x - 3.6.x | 官方支持,推荐组合 | | 4.0.x - 4.3.x | 3.6.x | 需手动适配部分类 | | ≥5.0 | 不支持 | 必须升级至Hibernate 5+ | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值