spring加载hibernate映射文件的几种方式



在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionFactory的所属类LocalSessionFactoryBean的“mappingResources”属性,方式包括(mappingResources,mappingLocations、mappingDirectoryLocations与mappingJarLocations )定义方法如下:

 第一种:

<property name="mappingResources">

    <list>

    <value>com/w3cs/vlar/hibernate/Person.hbm.xml</value>

    <value>com/w3cs/vlar/hibernate/Car.hbm.xml</value>

    <value>com/w3cs/vlar/hibernate/Engine.hbm.xml</value>

    <value>com/w3cs/vlar/hibernate/Toy.hbm.xml</value>

    </list>

</property>

当配置文件变得越来越多,阅读和修改起来也越来越麻烦,而且基于XML的配置也可能带来输入的错误,导致你可能因为一个字符的错误而浪费半天时间去寻找错误。

 第二种:

在这种情况下,可以使用LocalSessionFactoryBean的“mappingDirectoryLocations”属性来定义映射文件,只要指出映射文件所在文件夹就可以了,Spring会替你找出该文件夹内所有的映射文件,定义方法如下:

<property name="mappingDirectoryLocations">

    <list>

       <value>WEB-INF/mappings</value>

    </list>

</property>

第三种:

当然,它的属性值也可以通过classpath来指出,这时所指定的是工程的类路径

<property name="mappingDirectoryLocations">

     <list>

         <value>classpath:/my/package/*.hbm.xml</value>

     </list>

</property>

第四种:

<!-- 增加了对大对象字段处理配置Begin -->
 <bean id ="oracleLobHandler" 
      class ="org.springframework.jdbc.support.lob.OracleLobHandler" 
      lazy-init ="true" >  
      <property  name ="nativeJdbcExtractor"  ref ="nativeJdbcExtractor" />
  </bean>    
 
  <bean id ="nativeJdbcExtractor"  class ="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
      lazy-init ="true"/>
     <!-- 增加了对大对象字段处理配置End -->

<!--  定义Hibernatte框架中需要的SesscionFactory对象//-->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <!--增加了对大对象字段处理配置Begin -->
  <property name ="lobHandler" ref ="oracleLobHandler"/>
  <!--增加了对大对象字段处理配置End -->
  <property name="mappingDirectoryLocations">
       <list>
         <value>classpath:/my/package/login/dao/pojo/</value>
         <value>classpath:/my/package/jpf/dao/pojo/</value>
         ......

       </list>
  </property>



备注说明:




<property name="mappingJarLocations"> 
<list> 
<value>classpath*:\WEB-INF\lib\XXX.jar</value> 
</list> 
</property> 
错误提示org.hibernate.MappingException: Unknown entity: 
实体类未映射。 
搜索
现已确认,实体类无问题

其中,XXX.jar为HBM打包文件。实体类也另外打包,并导入项目。

请教这个问题如何解决?
呃。那个位置不是问题,classpath*:后,是否带路径都可以的。
现在的问题是找不到实体类,并不是无法读入hbm文件。。

从项目要求上不允许实体类和hbm文件打包在一起,必须分成2个包。。。
另外,jar包导入后,1个包还是2个包不是问题关键把,关键是为什么打包后就找不到实体类了。

打成一个包后仍然找不到实体类。。。
但是这样考虑,当初我路径写错的时候,错误提示是jar包没找到,现在的错误提示是实体类没找到,说明jar包已经找到了,但是识别不了jar包里面的实体类。

我是用ant打包的,刚才又测试了下,在实体类的包中加了一个无关的类,返回一个字符串,结果测试成功,说明jar包是找到了。
hibernate是通过hbm文件的class name来找实体类的,现在怀疑是hbm文件有问题。但是包名我检查了好多遍都没发现错误。。。
另外,<value>/WEB-INF/lib/po.jar</value> ,我最开始就用这种写法,但是错误是
java.io.FileNotFoundException: class path resource [WEB-INF/lib/Hbm.jar] cannot be resolved to URL because it does not exist
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值