hibernate错误解决方案(持续更新)
来源:互联网 发布:知柏地黄丸一次吃几粒 编辑:程序博客网 时间:2024/06/11 17:52
和上篇的spring错误解决方案一样,本篇要把开发中遇到的一些hibernate问题的解决方案记录下来,方便查阅:
1.org.hibernate.LazyInitializationException: could not initialize proxy - no Session
(1)这是一个hibernate懒加载所引起的懒加载问题,这也是一个比较经典的问题了,由于对象是懒加载的,当session关闭的时候就会遇到这个问题,在web开发中常常会遇到这个问题,比较经典的解决方案就是利用osiv模式,也就是在view层打开和关闭session,在jsp页面获取值时,session依然是存在的,在web.xml文件中配置一个filter就可以了
<filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name><url-pattern>*.action</url-pattern> </filter-mapping>注意:这个过滤器必须要在struts2的过滤器之前配置,如果在struts2的过滤器之后配置那么就不起作用了
还有一种解决方案就是在获取这懒加载对象是,调用相应的方法来获取值,比如Person是一个懒加载的对象,为了避免在jsp页面获取name时出现懒加载异常,那么可以在取得这个对象是用p.getName()来手动的获取下值,那么下次在获取值时,就不会出现这个问题了
2.java.lang.IllegalArgumentException: id to load is required for loading
为什么会遇到这个错误呢:通过get()或者load()方法通过id去查找对象时,传入的id为空,所有hibernate就会抛出这个异常。
解决方案:在web开发中常常需要通过客户端传递的id来查询某个javabean,所有在调用get()或者load()方法时就应该对id进行检查,只有在id不为空的情况下才能调用hibernate的方法去查询,否则进行相应的处理。
3.org.hibernate.MappingException: Unknown entity: cn.zq.domain.Person
由于没有在hibernate的配置文件中导入Person的映射文件,hibernate就不认识这个实体bean,解决方法就是在hibernate的配置文件中导入Person的映射文件。
4.org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.zq.domain.Student
分析:从字面上的意思来分析就是:你保存了一个关联着一个未保存的对象。也就是说你保存的一个对象所关联的对象不是持久化对象。
解决方案:
(1)在保存这个对象之前,先保存这个关联对象
(2)在映射文件中,配置cascade属性,设置这个属性后就可以级联的保存students
<set name="students" cascade="save-update"><key><column name="cid"></column></key><one-to-many class="cn.zq.domain.Student"/></set>
5.org.hibernate.HibernateException: No CurrentSessionContext configured!
分析:由于在调用sessionFactory.getCurrentSession()时,没有在hibernate的配置文件中配置相应属性,所有hibernate从当前线程获取session时报错,所以加入以下配置就解决了
6.More than one row with the given identifier was found: 1, for class: cn.rz.domain.Student(更新时间2015-05-06 15:33)
分析:出现这个异常的原因:在调用session.get(cls, id)时得到了不止一条记录,也就是说在内存中有多个相同id的class,最后在数据库中发现,这个字段并不是在数据库中的id,所以通过这个字段获取到的记录不止一条。
建议,最后不要用在数据库中不是主键的字段作为hibernate的主键,这个字段要么是主键,要么是唯一且不能为空的字段。
- hibernate错误解决方案(持续更新)
- Arcengine开发所遇错误解决方案(持续更新)
- Android错误提示及解决方案(持续更新)
- 错误总结(持续更新)
- 自己遇到的错误以及自己的解决方案(持续更新中~)
- iOS 11 新版本的错误和解决方案(会持续更新)
- Hibernate-部分知识点概述(持续更新)
- hibernate报错总结(持续更新)
- Spring、SpringMVC、Struts、Hibernate(持续更新)
- android FragMent 错误汇总 (持续更新)
- spring错误解决方法整理(持续更新)
- Hadoop错误集锦(持续更新)
- 低级错误(持续更新中)
- iOS错误集锦(持续更新)
- 常见错误(持续更新中~)
- VS2013 错误对照表(持续更新)
- C++编译错误汇总(持续更新)
- ReactNative错误归纳(持续更新)
- IOS基础:retain,copy,assign及autorelease
- CE3自学经历_关于PhotoShop CS6中导出CryTFF(.tff)格式的解决办法
- 但双方活动室冯浩男大夫山艰难地范晶男打算3
- Greenplum中定义数据库对象之创建与管理模式
- AutoLayout下多行UILabel无法显示多行文本的问题
- hibernate错误解决方案(持续更新)
- ms在线笔试题
- js:常用函数
- 几种任务调试的java实现方法与比较
- 杭电 HDU 1209 Clock
- 用Java语言实现二叉树的三种遍历(先序、中序、后序遍历)
- RFID:电子标签芯片的组成及功能
- Java中的常用术语
- 网上彩票停售,网上不能买彩票?