部署后 JPA 实体中出现 ClassCastException (Glassfish 3.1.2)

2024-02-18

使用 Glassfish 3.1.2 取消部署和部署 WebArchive (.war) 时出现奇怪的效果。

$ asadmin undeploy myWebApp; asadmin deploy target/myWebApp.war

它部署正常,但是当我通过实体管理器获取实体 bean 时,它会抛出异常:[#|2012-12-11T15:26:09.772+0100|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=119;_ThreadName=Thread-2;|java.lang.ClassCastException: org.YourEntity cannot be cast to org.YourEntity

该异常在 q.getSingleResult() 调用中引发。

  @PersistenceContext(unitName = "org.my-PU")
  private EntityManager em = Persistence.createEntityManagerFactory("org.my-PU").createEntityManager();
  ...
  public YourEntity findYourEntity() throws Exception {
      TypedQuery<YourEntity> q = em.createQuery("select ye from YourEntity ye", 
              YourEntity.class);
      return q.getSingleResult();
  }

我在项目中使用以下 JPA 相关依赖项:

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>javax.persistence</artifactId>
  <version>2.0.0</version>
</dependency>

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>2.0.2</version>
</dependency>

<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>11.1.0.7.0</version>
</dependency>

当我重新启动 glassfish 时,异常不再发生。在使用类似设置取消部署/部署 .ear 时,我从未遇到过此问题。有人看到过这个错误并知道如何克服它吗?这不是一个大问题,但很烦人。


与类加载器相关的资源静态保存,直到 EntityManagerFactories 关闭。这些是应用程序管理的,因此您必须在不再需要工厂关闭或取消部署事件时手动调用关闭工厂 - 垃圾收集也可能会清理它们,但在重新部署应用程序并使用以下命令再次访问它们之前,不会发生这种情况:不同的类加载器,导致您看到的异常。

保留工厂并在不再需要时将其关闭,或者使用注入并允许容器为您管理其生命周期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署后 JPA 实体中出现 ClassCastException (Glassfish 3.1.2) 的相关文章

随机推荐