Spring3和hibernate4整合的一点小问题
2014-01-18 00:00
288 查看
摘要: 用hibernate4保存save(Object record)时提示Unknown entity
其实这个问题在第一次使用hibernate4的时候就发现了,当时没怎么管,因为后来换用了mybatis。
现在又重新一个项目,用hibernate4来做,就出现了这个问题,鼓捣了很久,保存数据一直提示我的User类不是一个Entity,还好上次无意间发现了解决办法,不然我又得放弃hibernate了。
废话不多说了,切入正题:
大家都知道,hibernate和spring整合的方式有两种,
一种是写hibernate.cfg.xml,然后在spring配置文件中配置sessionFactory的时候引入这个配置文件就可以了
第二种是直接将数据库的连接写在spring配置文件中,建一个dataSource的bean
我用的是第一种,然后通过如下代码引入的*.hbm.xml文件:
这种方式一次性直接添加了所有的hbm.xml文件,节约了很多行代码,当然这种方式也没有错,加载spring配置文件,也可以自动建表,一切看来似乎都正常。
可是在对这些实体类操作的时候,就会报Unknown entity这个错误。出错后,我把hbm.xml文件改写在hibernate.cfg.xml文件中,就没有这个问题了。
我考虑了一下,原因应该是当我要操作一个实体类的时候,我首先要获取session,获取session的代码如下:
可以看到我在代码中的注释,获取session的时候通过读配置文件获得sessionFactory再创建的,在hibernate.cfg.xml中根被没有配置*.hbm.xml,所以会找不到。
我想应该是这样,总之这样可以解决,但是要多些点代码了,不过也就写一次,不需要大的改动,也不太影响,不知道大家怎么解决这个问题,也没时间去查资料了,夜深了,得赶紧睡觉了。
其实这个问题在第一次使用hibernate4的时候就发现了,当时没怎么管,因为后来换用了mybatis。
现在又重新一个项目,用hibernate4来做,就出现了这个问题,鼓捣了很久,保存数据一直提示我的User类不是一个Entity,还好上次无意间发现了解决办法,不然我又得放弃hibernate了。
废话不多说了,切入正题:
大家都知道,hibernate和spring整合的方式有两种,
一种是写hibernate.cfg.xml,然后在spring配置文件中配置sessionFactory的时候引入这个配置文件就可以了
第二种是直接将数据库的连接写在spring配置文件中,建一个dataSource的bean
我用的是第一种,然后通过如下代码引入的*.hbm.xml文件:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- hibernate配置文件 --> <property name="configLocations"> <value>classpath:/com/singlesing/cfg/hibernate.cfg.xml</value> </property> <!-- mapping配置文件 --> <property name="mappingLocations"> <list> <value>classpath:/com/singlesing/bean/mapping/*.hbm.xml</value> </list> </property> </bean>
这种方式一次性直接添加了所有的hbm.xml文件,节约了很多行代码,当然这种方式也没有错,加载spring配置文件,也可以自动建表,一切看来似乎都正常。
可是在对这些实体类操作的时候,就会报Unknown entity这个错误。出错后,我把hbm.xml文件改写在hibernate.cfg.xml文件中,就没有这个问题了。
我考虑了一下,原因应该是当我要操作一个实体类的时候,我首先要获取session,获取session的代码如下:
package com.singlesing.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @SuppressWarnings("deprecation") public class HibernateUtil { private static SessionFactory sessionFactory; static{ Configuration cfg = new Configuration().configure("com/singlesing/cfg/hibernate.cfg.xml");//注意这里 sessionFactory = cfg.buildSessionFactory(); } @SuppressWarnings("rawtypes") public static final ThreadLocal session = new ThreadLocal(); @SuppressWarnings("unchecked") public static Session getCurrentSession()throws Exception{ Session s = (Session)session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession()throws Exception{ Session s = (Session)session.get(); if (s != null) { s.close(); } } }
可以看到我在代码中的注释,获取session的时候通过读配置文件获得sessionFactory再创建的,在hibernate.cfg.xml中根被没有配置*.hbm.xml,所以会找不到。
我想应该是这样,总之这样可以解决,但是要多些点代码了,不过也就写一次,不需要大的改动,也不太影响,不知道大家怎么解决这个问题,也没时间去查资料了,夜深了,得赶紧睡觉了。
相关文章推荐
- 关于MongDB 与 Spring 整合的一点问题
- 整合spring4和hibernate4出现问题———"hibernate.dialect” not set
- ssh整合出现的一些问题总结(spring4+struts2+hibernate4)
- hibernate4 和 spring3 整合注意事项:HibernateDaoSupport没有了找到篇好文章,我之前遇到的问题都在这都能找到。其实出现这些问题的关键就是hibernate4和hib
- 画蛇添足-记spring3 hibernate4整合时遇到问题的处理办法
- hibernate4整合spring3事务问题
- 整合spring4和hibernate4出现问题———org.hibernate.service.spi.ServiceException:
- spring3整合hibernate4出现的问题
- Hibernate4与spring整合找不到org.hibernate.cache.CacheProvider问题
- hibernate4整合spring3.1的过程中的异常问题
- hibernate4整合spring3事务问题
- Spring3.x和Hibernate4的整合问题
- Hibernate4与Spring3整合问题之NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider
- 关于“Spring3 ”与 “Hibernate4” 整合,HibernateTemplate的使用问题。
- 关于Spring4+Hibernate4架构升级-整合的细节处理-由nested transactions not supported错误解决引申到事务嵌套问题处理
- Spring4+Hibernate4整合问题解决
- struts2+hibernate+spring整合过程中遇到的问题
- 关于struts2-spring整合的问题
- 关于Spring+Hibernate注解式整合问题
- hibernate4整合spring3.1出现java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider