Hibernate4.3在开发中的一些异常总结(持续更新)

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51273804

目录(?)[+]

        当被错误折磨半天后,突然找到解决办法了,那种快感……不是东京热可以给的了的……好来,不闲扯了,这篇文章主要是记录hibernate在开发中所出现的异常,方便以后查看~

1.java.lang.NoSuchMethodError:

1.1 javax.persistence.Table.indexes()[Ljavax/persistence/Index

        这个异常是我在对实体类使用注解的时候发生的。从名称上看,是Hibernate做持久化的时候出现的异常,没有指定的方法,而且出现在Table上,所以很自然的去实体类中的Table注解上找原因。因为我是用MyEclipse逆向工程自动生成的实体类,所以出现了Table的注解,先看一下自动生成的实体类:

[java] view plain copy

 

  1. /** 
  2.  * Category entity. @author MyEclipse Persistence Tools 
  3.  */  
  4. @Entity  
  5. @Table(name = "category", catalog = "shop")  
  6. public class Category implements java.io.Serializable {  
  7.     // Fields  
  8.     private Integer id;  
  9.     private String type;  
  10.     private Boolean hot;  
  11.     //省略  
  12. }  

        我后面在网上查了下,有人说这是hibernate-jpa-2.1.jar的问题,并且只有当使用注解的时候才会出现,把注解

[java] view plain copy

 

  1. @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语句为:

[java] view plain copy

 

  1. public List<Category> queryJoinAccount(String type) {  
  2.     String hql = "from Category c left join c.account where c.type like :type";  
  3.     return getSession().createQuery(hql)  
  4.             .setString("type", "%" + type + "%").list();  
  5. }  

        当我要从返回的List中取对象的时候就遇到问题了:

[java] view plain copy

 

  1. public void testQueryJoinAccount() {  
  2.     for(Category c : categoryService.queryJoinAccount("")) { //问题就出在Category c上  
  3.         System.out.println(c);  
  4.         System.out.println(c.getAccount());  
  5.     }  
  6. }  

        后来debug模式查看了一下,查询结果中保存的是一个数组,里面有Category和Account,因为做了级联查询,但是我从List中取出这个数组当然无法转换成Category对象了。解决办法就是在hql语句中加上fetch,让级联查询的Account加到Category对象中,这样返回的就是Category对象了。即:

[java] view plain copy

 

  1. 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

时间: 2024-09-08 12:05:09

Hibernate4.3在开发中的一些异常总结(持续更新)的相关文章

Android开发中常用的库总结(持续更新)

这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 原文地址:http://www.cnblogs.com/JohnTsai/p/4162390.html 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjauker/BadgeView 使用示例: BadgeView badge = new BadgeView(getActivity()); badge.setTargetView(myView); b

Java开发中常见的异常问题

作为一名游戏开发者,程序员,很自然必须熟悉对程序的调试方法.而要调试程序,自然需要对程序中的常见的异常有一定的了解,这些日子很多朋友都提出了很多问题,都是关于游戏中的报错,因此在这里我将一些常见的程序中的异常列举出来给大家参考: 1. java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片

Struts2在开发中的一些异常总结(持续更新)

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51281079 目录(?)[+]          当被错误折磨半天后,突然找到解决办法了,那种快感--不是东京热可以给的了的--好来,不闲扯了,本文主要记录struts2在开发中会遇到的一些问题或者异常,方便后面查阅. 1. java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.

Java 开发中常见的异常问题

1. java.lang.NullPointerException   这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空

PHP开发中的错误收集,不定期更新。

Fatal error: Non-static method Conn::__construct() cannot be called statically in /file.php 没有静态的方法(里面这个指方法参数,字符串类型),不能从静态上下文引用. Fatal error: [] operator not supported for strings in /file.php 当一个变量已设为非数组类型的时候,就不能再次使用[]让同名变量增加数据键值 解决方法:1.改变变量名称.2.使用$

PHP开发中的错误收集,不定期更新。_php技巧

Fatal error: Non-static method Conn::__construct() cannot be called statically in /file.php 没有静态的方法(里面这个指方法参数,字符串类型),不能从静态上下文引用. Fatal error: [] operator not supported for strings in /file.php 当一个变量已设为非数组类型的时候,就不能再次使用[]让同名变量增加数据键值 解决方法:1.改变变量名称.2.使用$

程序开发中异常的理解和认识

从接触异常开始我就弄不明白她,不会用她,想在系统中是异常机制发挥的淋漓尽致,进行了很多尝试,利用异常控制程序流程,利用异常做数字的判断函数,利用异常消除系统中可能出现的恼人的异常提示框,为了更好了利用异常看了很多关于异常的文章 直到有一天看到了一句话--"永远不要去处理你不知道怎么处理的异常",这才恍然大悟,感觉自己一直在用强大的异常机制干一些旁门左道的是事,更谈不上理解异常在程序中的地位和意义,异常其实一种报告机制,"她以一种不可回避的方式报告程序中所出现的问题"

浅谈Excel开发(九) Excel开发中遇到的常见问题及解决方法

相关文章: 浅谈Excel开发(1) Excel开发概述 浅谈Excel开发(二) Excel 菜单系统 浅谈Excel开发(三) Excel 对象模型 Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可能会装有多个版本的.NET运行时,有时候也可能装有多个版本的Visual Studio,本人的开发机器上就安装了3个版本的Visual Studi

iOS开发中的单元测试(二) 让断言活泼起来的匹配引擎

上一篇文章简单介绍了OCUnit和GHUnit两款iOS开发中较为常见的单元测试框架,本文进一步介绍单元测试 中的另一利器--匹配引擎(Matcher Engine).匹配引擎可以替代断言方法,配合单元测试引擎使用,测试 用例可以更多样化,更细致. 传统断言提供的方法数量和功能都有限,以导读中提到的两款框架为例 ,即使是断言相对丰富的GHUnit也只是提供了38种断言方法,范围仅涵盖了逻辑比较,异常和出错等少数几方 面,仍然很单一.而使用匹配引擎代替断言,可能性就大大丰富了,除了普通断言支持的规