异常总结2
1.JPA使用实体管理器EntityManager执行find方法时错误:
java.lang.IllegalArgumentException: id to load is required for loading
原因:方法entityManager.find(entityClass, primaryKey)的两个参数不能为空,如果查询的主键ID为空则抛出该异常,如果ID不为空而在数据库找不到对应的列时函数执行正常返回NULL。
与其他人的错误原因稍有不同,参见:http://inshect.iteye.com/blog/108626
?
2.实体管理器保存(persist)游离(脱管)对象时发生错误:
org.hibernate.PersistentObjectException: detached entity passed to persist
参见:http://topic.csdn.net/u/20100502/08/3809057e-c29b-418e-8772-28d21ec419af.html#r_65130317
同样奇怪的是我的错误原因与网上说的不同。
将一个实体由数据库取出后如果此时提交了事务(无论是使用EntityTransaction.commit()或是EntityManager.setFlushMode(FlushMode.commit))或关闭了实体管理器(EntityManager.close())都将导致该实体脱离实体管理器的管理,成为一个游离(脱管)对象,此时如果重新开启事务并试图再将该对象保存到数据库中(EntityManager.persist())都将导致该异常抛出。
?
3.没有开启数据库时使用无法实例化JPA实体管理器时的错误:
'hibernate.dialect' must be set when no Connection avalable
参见:http://topic.csdn.net/u/20091225/15/5ee84ded-3ebb-4862-86a3-73a42b61348e.html
但是同事也降低了系统的性能?
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业务方法中
@PersistenceContextprivate 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了!
参考:http://blog.sina.com.cn/s/blog_3d25e30f0100cyzi.html
?
8.JavaMail错误:
java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
?参考:http://blog.csdn.net/liuyxit/article/details/5193802
深蓝 写道环境:MyEclipse和JDK1.6环境,加入JavaMail1.4.3的jar包。运行测试报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 。
原因:
MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。
解决:
在MyEclipse目录下,找javaee.jar包,用WinRar打包,删除里面的mail目录,然后加入mail.jar和activition.jar
下载网址:
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/javase/technologies/desktop/javabeans/jaf/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;