我看到一条奇怪的错误消息,正在寻找一些关于问题可能是什么的想法。我对使用 JPA 有点陌生。
我有一个应用程序,我使用 Spring 的实体管理器工厂 (LocalContainerEntityManagerFactoryBean),EclipseLink 作为我的 ORM 提供程序,连接到 MySQL DB 并使用 Maven 构建。我不确定这些是否重要......
当我将此应用程序部署到 Glassfish 时,该应用程序按预期工作。
问题是,我创建了一组独立的单元测试来在 Glassfish 之外运行,这些测试不能正常工作。我收到以下错误(我已经稍微编辑了类名)
com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
该对象不能转换为相同类型的类?怎么可能?
这是错误的代码片段
Query q = entityManager.createNamedQuery("MyEntity.findAll");
List entityObjects = q.getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
以前,我有这段代码产生了同样的错误:
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(com.xyz.abc.services.persistence.entity.MyEntity.class));
List entityObjects = entityManager.createQuery(cq).getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
此代码的问题与我部署到服务器的问题相同。
如果有帮助,这是最里面的例外
Caused by: java.lang.ClassCastException: com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
at com.xyz.abc.services.persistence.entity.factory.MyEntityFactory.createBeans(MyEntityFactory.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... 37 more
我猜我在 Glassfish 中使用的一些罐子与我在测试中使用的罐子不同。我查看了所有我列为“提供”的罐子,并且很确定它们都是来自 Glassfish 的相同罐子。
让我知道您以前是否见过这个奇怪的问题,或者有任何纠正它的想法。