2013-12-21 97 views
0

大家好我是新的J2EE世界。 我试图使用@Namequery从我的模型中获取一个字符串列表(该类称为元素),在这种情况下属性名称。 为什么当我使用@NamedQuery(name="Element.findAllNames",query="SELECT e.name FROM Element e") 我用用我的ElementMgrBean:使用NamedQuery不匹配返回查询

public List<String> getAllElementsName() { 
    return em.createNamedQuery(Element.FIND_ALLNAMES,Element.class).getResultList(); 
} 

结果似乎是元素,而不是如我所料字符串列表清单。有人可以解释为什么Java说:“类型不匹配:不能从元素列表转换为字符串列表”? PS:我已经定义:public static final String FIND_ALLNAMES = "Element.findAllNames";

回答

0

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

为了校正您改正调用em.createNamedQuery(Element.FIND_ALLNAMES, String.class)问题(该优选方案,因为它返回一个TypedQuery<String>实例),或删除第二个参数:em.createNamedQuery(Element.FIND_ALLNAMES)(在这种情况下,你不是类型安全了,因为它返回一个Query实例)。

+0

非常感谢你的配合!现在它工作! – Rotom92