Grails 如何在 g:each 中显示 HQL JOIN 值

Grails how to show HQL JOIN value in g:each

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

控制器

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>

在控制器中使用像您一样的 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 方法为视图构建模型。您必须在域 类 之间添加引用并使用动态查找器或条件查询。