java.lang.IllegalArgumentException: id to load is required for loading
原因:方法entityManager.find(entityClass, primaryKey)的两个参数不能为空,如果查询的主键ID为空则抛出该异常,
如果ID不为空而在数据库找不到对应的列时函数执行正常返回NULL。
与其他人的错误原因稍有不同,参见:id to load is required for loading
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() 都将导致该异常抛出。
'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
但至少该异常明确的指出是没有打开数据库连接所致的错误。
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
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
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并不支持隔离级别的设置,因此报错。
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中的中文编码问题
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
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;
严重: 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
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