我最初通过以下查询来获取 List<Employee>
:
Query query = session.createQuery("select table1 from Table as table1");
this.employees = (List<Employee>) query.list();
这已在下面的数据表中成功呈现:
<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 个表中检索它时:
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)
...
这是怎么造成的,如何解决?
最佳答案
您的 Hibernate 查询实际上返回 List<Object[]>
,不是List<Employee>
正如您在未经检查的 Actor 阵容中错误地假设的那样。
证据位于堆栈跟踪中:
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
仅涉及 name
的基数(因此, #{employee}
)表示类似 Object[]
的数组不是像Bean
这样的javabean 。 EL 正在尝试使用 name
通过索引获取数组项,该索引只能是整数,如 #{employee[0]}
对于第一项。但是,字符串值 "name"
无法解析为整数,因此出现此异常。
您有两种选择来解决此问题:
更改 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 查询以返回真实
List<Employee>
.
另请参阅:
关于jsf - 在 JSF 数据表中显示 Hibernate/JPA 结果会导致 : java. lang.NumberFormatException:对于输入字符串: "[propertyname]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29094320/