gpt4 book ai didi

sorting - 如何在 Grails 中按可空关联的属性排序?

转载 作者:行者123 更新时间:2023-12-02 00:33:27 25 4
gpt4 key购买 nike

我正在尝试对数据表进行排序。我有以下域(释义和示例化):

class Car {
Engine engine
static constraints = {
engine nullable: true // poor example, I know
}
}

class Engine {
String name
}

这是处理排序的 Controller 操作:

def myAction = {
def list = Car.findAll(params)
render(view: 'list', model: [list: list])
}

我提供了一些数据,这样就有几辆汽车,一些汽车的引擎为空,而另一些汽车的引擎不为空。

我尝试以下查询:

http://www.example.com/myController/myAction?sort=engine.name&order=asc

查询结果只返回引擎不为空的 Car 条目。这与我仅查询关联(没有其属性)时返回的结果不同:

http://www.example.com/myController/myAction?sort=engine&order=asc

这将返回所有 Car 结果,将具有空引擎的结果组合在一起。

有没有办法:

  • 我可以获得按关联属性排序的查询返回与仅按关联排序的查询相同的结果(空关联组合在一起)?
  • 我可以使用传递给 list() 的内置排序来获得这些结果(即不使用 Criteria 或 HQL 查询)

最佳答案

您需要在查询中指定 LEFT_JOIN,试试这个:

import org.hibernate.criterion.CriteriaSpecification

...

def list = Car.createCriteria().list ([max:params.max?:10, offset: params.offset?:0 ]){

if (params.sort == 'engine.name') {
createAlias("engine","e", CriteriaSpecification.LEFT_JOIN)
order( "e.name",params.order)

} else {
order(params.sort, params.order)
}
}

请记住将 engine.name 作为在 list.gsp 中排序的属性

<g:sortableColumn property="engine.name" title="Engine Name" />

关于sorting - 如何在 Grails 中按可空关联的属性排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com