Hibernate4.3在开发中的一些异常总结(持续更新)
当被错误折磨半天后,突然找到解决办法了,那种快感……不是东京热可以给的了的……好来,不闲扯了,这篇文章主要是记录Hibernate在开发中所出现的异常,方便以后查看~
1.java.lang.NoSuchMethodError:
1.1 javax.persistence.Table.indexes()[Ljavax/persistence/Index
这个异常是我在对实体类使用注解的时候发生的。从名称上看,是Hibernate做持久化的时候出现的异常,没有指定的方法,而且出现在Table上,所以很自然的去实体类中的Table注解上找原因。因为我是用MyEclipse逆向工程自动生成的实体类,所以出现了Table的注解,先看一下自动生成的实体类:
/*** Category entity. @author MyEclipse Persistence Tools*/
@Entity
@Table(name = "category", catalog = "shop")
public class Category implements java.io.Serializable {// Fieldsprivate Integer id;private String type;private Boolean hot;//省略
}
我后面在网上查了下,有人说这是hibernate-jpa-2.1.jar的问题,并且只有当使用注解的时候才会出现,把注解
@Table(name = "category", catalog = "shop")
删掉 问题就解决了,这可能是Hibernate4.3的一个小bug。
1.2 javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;
这个异常很明显是跟外键有关,hibernate4.3中在使用多对一映射时不能使用注解@JoinColumn(name = "account_id")。我在网上查了下,说是JAVAEE6.0中的 javax.persistence.jar与 hibernate4.3中的hibernate-jpa-2.1.jar冲突。所以现在有两个解决方法:
1. 不写@JoinColumn(name = "account_id");
2. 将工程中的JavaEE 6.0 Generic Libary移除掉,再加进来就可以了。
2. java.lang.NoClassDefFoundError
2.1 com/mchange/v2/ser/Indirector
这种是Hibernate和Spring整合的时候,报的错误,从exception看应该是缺少跟mchange相关的jar包,我查了一下,是mchange-commons-java-0.2.10.jar,它是c3p0所需要的一个另一个jar包,c3p0除了需要c3p0-0.9.5.1\c3p0-0.9.5.1.jar之外,还需要此jar包,加进工程里就没问题了。
3. org.hibernate.hql.internal.ast.QuerySyntaxException
3.1 Category is not mapped [delete Category as c where c.id=:id]
这个异常从提示中看,比较明显,Category没有匹配。针对xxx is not mapped问题的异常,我们主要从以下几个方面去排除:
1)看看是否将Category类的映射<mapping....>添加到hibernate.cfg.xml文件中了,或者将hibernate.cfg.xml文件添加到Spring的beans.xml的配置中了。
2)比较容易想到的是:hql中写的应该是实体类名,而不是表名。注意大小写。
3)检查表中的字段和映射文件中的字段是否一致,检查字段名是否用了数据库中的关键字。
如果都没问题,那此时肯定是崩溃的……比如我当时遇到这个问题就是……
那么还有个地方值得注意:
4)我设置了@Entry(name="Category),想要改表的名字不是设置Entity注解的name属性,而是设置Table注解的name属性。所以我直接将(name="Category")去掉了,这样就没有问题了。
4. org.hibernate.LazyInitializationException
4.1 could not initialize proxy - no Session
这个异常从名称上看,应该是和懒加载有关,我检查了一下自己的注解,便知道问题出在哪了:在多对一映射中(比如Book和User),如果要查询多方(book),并且在注解中配置的是@ManyToOne(fetch = FetchType.LAZY),则表示查询多方的时候不关联一方,这样我在查询完后拿数据的时候,如果要从book中拿相应的User就会抛出该异常,解决办法就是将LAZY设置成EGER。
5. java.lang.ClassCastException
5.1 [Ljava.lang.Object; cannot be cast to cn.it.shop.model.Category
这个是一个转换异常,我在hibernate中做级联查询时候遇到的,级联查询的hql语句为:
public List<Category> queryJoinAccount(String type) {String hql = "from Category c left join c.account where c.type like :type";return getSession().createQuery(hql).setString("type", "%" + type + "%").list();
}
当我要从返回的List中取对象的时候就遇到问题了:
public void testQueryJoinAccount() {for(Category c : categoryService.queryJoinAccount("")) { //问题就出在Category c上System.out.println(c);System.out.println(c.getAccount());}
}
后来debug模式查看了一下,查询结果中保存的是一个数组,里面有Category和Account,因为做了级联查询,但是我从List中取出这个数组当然无法转换成Category对象了。解决办法就是在hql语句中加上fetch,让级联查询的Account加到Category对象中,这样返回的就是Category对象了。即:
String hql = "from Category c left join fetch c.account where c.type like :type"
这样就解决了问题。
5.2 cn.it.shop.model.Product_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
这种问题和上面的区别是:上面无法转化成具体的类,这里无法转化成一个代理,我去网上搜了一下,原来是我工程中的jar包发生了冲突,看下面:
把struts2.3.41中的javassist-3.11.0GA.jar删掉即可。
欢迎大家补充,我会更新到文章中~
_____________________________________________________________________________________________________________________________________________________
-----乐于分享,共同进步!
-----更多文章请看:http://blog.csdn.net/eson_15
Hibernate4.3在开发中的一些异常总结(持续更新)相关推荐
- uni-app开发中遇到的问题(持续更新...)
uni-app开发中遇到的问题 详情页面返回上一页,并刷新列表 components中的组件无需引入 分离页面的js.css文件 设置页面颜色出现分层 uni-app端无法显示图片 uniapp如何取 ...
- 项目开发中遇到的问题汇总~持续更新
项目开发快进入尾声了,之前一直较忙,也由于没有遇到什么可以记载的问题,故此一直未整理,近期渐渐闲下来,会逐渐将这个项目在开发中遇到的问题汇总出来: 1. 集成蓝牙(佳博打印机)要在info里面进行如下 ...
- android开发中的ANR异常
android开发中的ANR异常 参考文章: (1)android开发中的ANR异常 (2)https://www.cnblogs.com/yejiurui/archive/2012/11/08/27 ...
- Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)
Android开发人员不得不收集的代码(持续更新中) Blankj 关注 2016.07.31 04:22* 字数 370 阅读 102644评论 479喜欢 3033赞赏 14 utilcode D ...
- kotlin常用语法扫盲及开发注意点,勿错失(持续更新)
kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 文章目录 kotlin常用语法扫盲及开发注意点,勿错失(持续更新) 单句表达式 可以直接 用 = 省略 大括号 ::双冒号作用 map,lis ...
- ios学习--iphone开发笔记和技巧总结(原址持续更新)
ios学习--iphone开发笔记和技巧总结(原址持续更新) 分类: ios Object-C2012-04-18 10:16 2716人阅读 评论(1) 收藏 举报 uiviewiphonelist ...
- “1+X”云计算平台运维与开发职业技能等级认证教程(持续更新)
"1+X"云计算平台运维与开发职业技能等级认证教程(持续更新) 目录 一.Linux基础知识 1.1 Linux简介 1.2 IP地址的配置 1.3 配置yum源 1.4 下载的必 ...
- 开发中关于Fragment异常的两个问题
下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题,今天时间比较多,就在网上搜了一些解决方式: 1.关于Fragment(XXFragment) not attached to Ac ...
- android应用开发中收集的异常日志解决方法记录
这里主要是列出开发中收集的一些错误日志,以及解决方案,仅供参考,也有待解决的问题 1, ListView 中出现java.lang.IndexOutOfBoundsException: Invalid ...
- 【Python全栈开发从入门到实战】持续更新中......
本专栏为Python全栈开发系列文章,技术包括Python基础.函数.文件.面向对象.网络编程.并发编程.MySQL数据库.HTML.JavaScript.CSS.JQuery.bootstrap.W ...
最新文章
- 2017 数据驱动大会豪华议程出炉,早鸟票一周内全部售罄
- UNITY 中List.Sort的BUG
- 软件测试:我该坚持在一个人的岗位还是辞职?
- react周期函数介绍
- 【FLUENT案例】04:利用DDPM+DEM模拟鼓泡流化床
- 【SimpleITK】分割结果融合策略
- 关于JSF Converter转换器的知识点
- 基于pytorch实现线性回归
- vue使用高德地图获取当前经纬度
- 什么是Subscript?
- BNNVGG2-VGG Net
- BI PUBLISHER RTF模板制作PIVOT表和重分组
- 基于.Net TcpListener 实现 WebSocketServer 通讯
- 配置容错组件 Sentinel(五)
- NPOI导出和导入Excel,Word和PDF
- 加拿大旅游签(visitor-business)的解释信模板
- 快捷精灵(shortcutghost) 是什么
- Optitrack使用ros完成实时接收刚体的位置与四元数信息
- 元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”
- 睿智的目标检测62——Keras搭建YoloV7目标检测平台
热门文章
- 图像处理MATLAB③(Roberts算子边缘检测,膨胀,滤波,腐蚀,开运算,闭运算使用方法)
- android 连接魅族调试,魅族Flyme手机无法连接电脑ADB调试
- Friends S01.01 Part A
- 1.深入浅出:理解三极管截止、放大和饱和状态!——参考《模拟电子技术基础》清华大学华成英主讲
- 阿里云公司简介介绍资料
- 可靠产品设计的5项技术 02-识别和评估关键的可靠性风险
- VS-RK3399 and VS-RK3288 Audio 开发指南
- Android反编译APK
- python实现遗传算法实例_vn.py发布v2.0.3 - 遗传算法
- asp.net/net/c#电子购物商城系统-成品