我是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()
)