ClassCastException:JPA - > Bean值(不同的ClassLoaders)

时间:2011-04-14 14:40:45

标签: jpa eclipselink classcastexception

在将JPA中的对象分配给ManagedBean的属性时,我得到了ClassCastException:

Object r = query.getSingleResult(); // javax.persistence.Query
ClassLoader c1 = this.getClass().getClassLoader();
ClassLoader c2 = r.getClass().getClassLoader();
user = (User) r; // blubb.model.User

问题是c1(ManagedBean)和c2(EclipseLink)是不同的ClassLoader:

c1:WebappClassLoader(delegate = true; repositories = WEB-INF / classes /)
c2:WebappClassLoader(delegate = true)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

你的环境是什么?您使用的是Java EE,Spring,OSGi吗?哪个服务器,WLS,WAS,GF?

您是否重新部署了申请?持久性单元是管理还是非管理?

可能是您重新部署了应用程序,但从未关闭过EntityManagerFactory,因此仍然使用旧类进行部署。

答案 1 :(得分:0)

我有同样的问题。在Glassfish 4.1.1中使用EclipseLink 2.5.2 JPA的简单JSF项目。

通过正确关闭EntityManagerFactory来解决问题。我建议使用ServletContextListener@WebListener)(看看herehere)。