文档章节

Java异常总结

cwalet
 cwalet
发布于 2014/08/25 11:52
字数 1246
阅读 94
收藏 1

1.JPA使用实体管理器EntityManager执行find方法时错误

java.lang.IllegalArgumentException: id to load is required for loading

原因:方法entityManager.find(entityClass, primaryKey)的两个参数不能为空,如果查询的主键ID为空则抛出该异常,

如果ID不为空而在数据库找不到对应的列时函数执行正常返回NULL。

与其他人的错误原因稍有不同,参见:id to load is required for loading

 

2.实体管理器保存(persist)游离(脱管)对象时发生错误

org.hibernate.PersistentObjectException: detached entity passed to persist

参见:JPA异常:org.hibernate.PersistentObjectException: detached entity passed to persist

同样奇怪的是我的错误原因与网上说的不同。

将一个实体由数据库取出后如果此时提交了事务,无论 EntityTransaction.commit()

EntityManager.setFlushMode(FlushMode.commit)EntityManager.close() 都将导致该实体脱离实体管理器的管理,

成为一个游离()对象,此时如果重新开启事务并试图再将该对象保存到数据库中,如 EntityManager.persist() 都将导致该异常抛出。


3.没有开启数据库时使用无法实例化JPA实体管理器时的错误

'hibernate.dialect' must be set when no Connection avalable

参见:http://bbs.csdn.net/topics/330006556

hql只有在连接可用的情况下才能设置,hibernate.dialect=org.hibernate.dialect.XXXDialect 位置应该

放到 hibernate.show_sql=true 之前,在persistence.xml中设置该行之后还是会报异常的:

Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection

但至少该异常明确的指出是没有打开数据库连接所致的错误。


4.在没有struts过滤的页面中使用struts标签的错误

The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag

如果一个jsp页面中包含有struts2的标签,那请求信息应该要经过Struts2的FilterDispatcher。个人觉得这点非常不方便,尤其是如果自定义Jsp Filter的话,那会有一大堆没办法解决的问题。

参见:Struts2标签问题-using Struts tags without the associat


5.使用JPA去除懒加载对象时错误

could not initialize proxy - no Session

原因:由于对多对一(ManyToOne)级联的某一个对象设置了懒加载(fetch=FetchType.LAZY),

而在使用实体管理器(EntityManager)取出该对象后立即提交(commit)了实体事务(EntityTransaction),

因此此时在想取出该级联对象时将会抛出此异常。由于使用了Spring对JPA事务进行管理,

EntityManager对象是使用 PersistenceContext(unitName="") 自动注入的,

因此取出托管对象后就立即由Spring自动关闭了事务,不能再进行后续查询操作。

设置lazy="false" 解决了大部分的延时加载问题,但是同时也降低了系统的性能。
参见: Hibernate3 错误: could not initialize proxy - no Session

 

6.使用Spring管理JPA事务时为其添加提交级别时出错

org.springframework.transaction.InvalidIsolationLevelException: Standard JPA does not support custom isolation levels - use a special JpaDialect for your JPA implementation

在一个使用自动注入JPA实体管理器的Spring bean业务方法中

@PersistenceContext
private EntityManager entityManager;

 添加了如下事务控制:

@Transactional(noRollbackFor = NoResultException.class, readOnly = true, isolation = Isolation.SERIALIZABLE)

由于希望使事务提交级别具备更高的安全性,因而使用了“串行化”隔离级别。但是JPA并不支持隔离级别的设置,因此报错。

 

7.dom4j编码错误

org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence. Nested exception: Invalid byte 1 of 1-byte UTF-8 sequence.

原因是读取的xml文档是ANSI编码的,而在保存时设置了OutputFormat的编码为UTF-8:

outputFormat.setEncoding("UTF-8");

 用记事本打开xml文档另存为UTF-8就OK了!

参考:Dom4j中的中文编码问题


8.JavaMail包冲突错误

java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

 参考:http://blog.csdn.net/liuyxit/article/details/5193802

原因: MyEclipse6.5的javaee.jar中的mail包与JavaMail.jar包有冲突。

解决: 使用最新的javaee.jar包,或将旧版jar包中的的mail目录删除后,加入mail.jar和activition.jar

下载:http://java.sun.com/products/javamail/downloads/index.html

 

9.Spring2.5集成JPA运行时出错

Specified field type [interface javax.persistence.EntityManager] is incompatible with resource type [javax.persistence.EntityManagerFactory]

参考:http://blog.csdn.net/jianw2007/article/details/5218865

//在一个Service类中
@PersistenceUnit EntityManager em;
//应该改为
@PersistenceContext EntityManager em;


10.Struts2.2.1依赖包缺少错误

严重: Dispatcher initialization failed
Unable to load configuration. - bean - jar:file:/D:/Document/Workspaces/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/struts/WEB-INF/lib/struts2-core-2.2.1.jar!/struts-default.xml:48:178

  • commons-fileupload-1.2.1.jar
  • commons-logging-1.0.4.jar
  • commons-io-1.3.2.jar
  • ognl-3.0.jar
  • xwork-core-2.2.1.jar
  • struts2-core-2.2.1.jar
  • freemarker-2.3.16.jar
  • javassist-3.7.ga.jar (缺少该包导致)


11.JPA Identity字段手工设置值

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.jpa.bean.Person

错误原因可能是,对标记为@Id和@GeneratedValue的字段,调用其setXXX方法然后再执行 entityManager.persist()持久化方法,

此时JPA会判断该字段是自增长的,不能显示设置,因此报错;另一种可能是,手工将数据库中该表的自增属性去掉。

参考:http://zjt112g.iteye.com/blog/262800

© 著作权归作者所有

cwalet
粉丝 44
博文 111
码字总数 87663
作品 0
其他
私信 提问
JVM规范系列第6章:Java虚拟机指令集

一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成。 虚拟机指令 = 操作码 + 操作数。 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别为 impd...

陈树义
2018/12/19
0
0
Android JNI开发系列(十三) JNI异常处理

JNI 异常处理 JNI异常与JAVA处理异常的区别 JAVA 有异常处理机制,而JNI没有 如果JAVA中异常没有捕获,后面的代码不会执行,JNI会执行 JAVA编译时的异常,是在方法显示的声明了某一个异常,编...

蔡小鹏
2018/10/20
0
0
Java自定义Exception

这里总结一下Java的Exception,并实现一个自定义Exception类。 总结: Throwable对象分为两种类型:Error(表示编译时和系统错误);Exception(在Java类库、用户方法以及运行时故障中抛出的异常...

Triangle23
2014/12/02
0
1
06-《深度拆解JVM》之JVM是如何处理异常的?

一、问题引入 今天我们来讨论下 Java 虚拟机的异常处理。众所周知,异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。 抛出异常可分为显式和隐式两种...

飞鱼说编程
2018/09/28
0
2
JVM学习总结(一)运行时数据区

《深入Java虚拟机》这本书买了有一段时间了,当时看的时候就只是看,并没有边看边总结啥的,最后发现到脑子里面的根本所剩无几了。现在开始要好好归纳总结地再学习一遍。 运行时数据区域 JV...

hensemlee
2018/04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
16分钟前
0
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
42分钟前
3
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
52分钟前
1
0
PHP的学习

PHP变量的命名必须以$符开始,如: $i;$j;$name; $符后面的第一个字符不可以是数字,只能是字母或者下划线(_)。 除了下划线(_)之外,变量中不能出现任何特殊字符,也就是变量只能包含...

墨冥
今天
3
0
一篇文章彻底搞懂Java虚拟机

概念: 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box,Java Virtual Machine(Jav...

骚年锦时
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部