首页 > 解决方案 > Grails 如何在 g:each 中显示 HQL JOIN 值

问题描述

我想问如何在查看页面上显示此代码结果

控制器

query =" select subs.firstName, trx.currentBalance from Transaction trx, Subscriber subs where 
trx.subscriberID = subs.msisdn and trx.subscriberID = '0' and trx.date ='2020-09-04'"
query= Transaction.executeQuery(query);

使用此代码:

查看页面

<g:each in="${listQueryTable}" status="i" var="userInstance">
<tr>
<td>${userInstance.firstName}</td>      <-- this code does not work for me
<td>${userInstance.currentBalance}</td> <-- this code does not work for me
</tr>
</g:each>

标签: hibernatejoingrailsgroovyhql

解决方案


在控制器中使用像您这样的 HQL 查询,您可以使用如下索引在 GSP 中显示它的值:

<g:each in="${listQueryTable}" status="i" var="userInstance">
<tr>
<td>${userInstance[0]}</td> 
<td>${userInstance[1]}</td>
</tr>
</g:each>

因为 的每个元素listQueryTable都是一个Object[].

作为一种变体,您可以像这样将每个列表的元素转换为地图:

query =" select subs.firstName, trx.currentBalance, ..."
listQueryTable = Transaction.executeQuery(query).collect{ [ firstName:it[0], currentBalance:it[1], ... ] }

那么您可以使用您原来的 GSP 进行展示。

正确的解决方案是摆脱原始 HQL 查询并使用 Hibernate/GORM 方法为 View 构建模型。您必须在域类之间添加引用并使用动态查找器或条件查询。


推荐阅读