显示Hibernate / JPA导致JSF datatable的原因:java.lang.NumberFormatException:对于输入字符串:“[propertyname]” [英] Showing Hibernate/JPA results in JSF datatable causes: java.lang.NumberFormatException: For input string: "[propertyname]"

查看:161
本文介绍了显示Hibernate / JPA导致JSF datatable的原因:java.lang.NumberFormatException:对于输入字符串:“[propertyname]”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最初我以下查询获取列表< Employee>

Query query = session.createQuery("select table1 from Table as table1");
this.employees = (List<Employee>) query.list();

这在下面的datatable中成功呈现:

This is successfully rendered in below datatable:

<p:dataTable var="employee" value="#{bean.employees}">
    <p:column id="name" headerText="Name">
        <h:outputText value="#{employee.name}" />
    </p:column>
    <p:column id="id" headerText="ID" >
        <h:outputText value="#{employee.id}" />
    </p:column>
</p:dataTable>

但是,当我尝试从2个表中检索它,如下所示:

However, when I try to retrieve it from 2 tables as below:

Query query = session.createQuery("select a.name, b.id from Table1 as a, Table2 as b"); 
this.employees = (List<Employee>) query.list();

它引发以下异常:

java.lang.NumberFormatException: For input string: "name"
    at java.lang.NumberFormatException.forInputString(Unknown source)
    at java.lang.Integer.parseInt(Unknown source)
    at java.lang.Integer.parseInt(Unknown source)
    at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:166)
    at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
    ...

这是如何造成的,如何我可以解决它吗?

How is this caused and how can I solve it?

推荐答案

您的Hibernate查询是实际返回一个列出< Object []> ,而不是列表< Employee> ,因为您在未选中的演员中错误地假设。

Your Hibernate query is actually returning a List<Object[]>, not a List<Employee> as you incorrectly assumed during the unchecked cast.

证据在堆栈跟踪中:

java.lang.NumberFormatException: For input string: "name"
    at java.lang.NumberFormatException.forInputString(Unknown source)
    at java.lang.Integer.parseInt(Unknown source)
    at java.lang.Integer.parseInt(Unknown source)
    at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:166)
    at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
    ...

ArrayELResolver 涉及名称(因此,#{employee} )表示像 Object [] 不像javabean一样的数组 Bean 。 EL尝试使用名称通过索引获取数组项,这只能是像这样的整数#{employee [0]} 为第一项。但是,字符串值name不能解析为整数,因此此异常。

The ArrayELResolver is only involved when the base of name (thus, the #{employee}) represents an array like Object[] not a javabean like Bean. EL is attempting to use the name to obtain the array item by index, which can only be an integer like so #{employee[0]} for the 1st item. However, the string value "name" is not parseable as an integer and hence this exception.

您有2解决此问题的选项:

You have 2 options to solve this problem:


  • 更改JSF代码以期望 List< Object []> ; 。使用例如#{employee [0]} #{employee [1]} 等。

<p:dataTable var="employee" value="#{bean.employees}">
    <p:column id="name" headerText="Name">
        <h:outputText value="#{employee[0]}" />
    </p:column>
    <p:column id="id" headerText="ID" >
        <h:outputText value="#{employee[1]}" />
    </p:column>
</p:dataTable>


  • 修复Hibernate查询以返回一个真实 列表< Employee>

    这篇关于显示Hibernate / JPA导致JSF datatable的原因:java.lang.NumberFormatException:对于输入字符串:“[propertyname]”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆