我是Java实体的新手,从Query.getSingleResult()调用转换时,我遇到了一个奇怪的问题。这是一个代码片段:

  LoaPoliciesConfig policy = new LoaPoliciesConfig();
  EntityManager em = getEntityManager();
  try
  {
     Query q = em.createNamedQuery("LoaPoliciesConfig.findByName");
     q.setParameter("policyName", policyName);
     Object ret = q.getSingleResult();
     policy = (LoaPoliciesConfig) ret;
  }


经过好几年的工作,这突然开始给我这个错误:

CRAAC.WebService.DataAccess.LoaPoliciesConfig cannot be cast to
CRAAC.WebService.DataAccess.LoaPoliciesConfig


最初,在重新启动服务器时,这种情况消失了,但是最后一次发生时,它似乎仍然存在。

getSingleQuery()返回一个Object,到目前为止,我在网上找到的所有文档似乎都表明这是首选的实现方式。所以,我的问题本质上是我在这段代码中做错了什么,还是仅仅是服务器在途中被某个地方弄糊涂了?

最佳答案

我怀疑您的类路径上有2个LoaPoliciesConfig类,因此正在从两个不同的类加载器中加载/访问它们。

在这种情况下,一个类加载器中的类X不等同于另一个类加载器中的类X,您会看到混乱。检查您的类路径,环境中可用的类以及它们的加载位置(通过getClass()getClassLoader()

10-07 15:43