2

将 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)

我怎样才能解决这个问题?

4

2 回答 2

2

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

您是否重新部署了应用程序?持久性单元是托管的还是非托管的?

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

于 2011-04-18T14:14:22.660 回答
0

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

通过正确关闭EntityManagerFactory. 我建议使用ServletContextListener( @WebListener) (看这里这里)。

于 2016-11-26T21:39:50.873 回答