【问题标题】:Mismatching return of a query with NamedQuery与 NamedQuery 的查询返回不匹配
【发布时间】:2013-12-21 11:33:34
【问题描述】:

大家好,我是 J2EE 世界的新手。 我正在尝试使用@Namequery 从我的模型中获取字符串列表(该类称为元素),在本例中为属性 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();
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多