使用NamedQuery返回不匹配的查询

时间:2013-12-21 11:33:35

标签: java mysql java-ee jpa named-query

大家好,我是J2EE世界的新手。  我正在尝试使用@Namequery从我的模型中获取一个String列表(该类称为Element),在本例中是属性 name 。 我使用@NamedQuery(name="Element.findAllNames",query="SELECT e.name FROM Element e")时的原因  我使用:

在我的ElementMgrBean上使用它
public List<String> getAllElementsName() {
    return  em.createNamedQuery(Element.FIND_ALLNAMES,Element.class).getResultList();
}

结果似乎是一个元素列表,而不是我期望的String列表。 有人可以解释为什么Java说:“类型不匹配:无法从元素列表转换为字符串列表”? PS:我已定义:public static final String FIND_ALLNAMES = "Element.findAllNames";

1 个答案:

答案 0 :(得分:0)

当你写em.createNamedQuery("NameOfNamedQuery", MyClass.class)时,你说你想要获取MyClass实例(在你的查询MyClass == Element中)。现在的问题是,您的查询SELECT e.name FROM Element e返回字符串而不是元素实例(因为e.name字段的类型为字符串)。

为了解决问题,您要么更正对em.createNamedQuery(Element.FIND_ALLNAMES, String.class)的调用(首选解决方案,因为它返回TypedQuery<String>实例),要么删除第二个参数:em.createNamedQuery(Element.FIND_ALLNAMES)(在这种情况下,您不再是类型安全的,因为它返回Query实例)。