【问题标题】:Grails select domain objects based on an enum value in an enum list propertyGrails 根据枚举列表属性中的枚举值选择域对象
【发布时间】:2024-04-22 14:15:02
【问题描述】:

我无法根据枚举列表中的值从域对象列表中选择项目。

我的域对象如下所示:

class Truck {
  static hasMany = [ makes: Make ]  
}

Make 看起来像这样:

enum Make {
  KENWORTH, MACK, VOLVO 
}

我不太确定如何使用 Truck.findByMake(Make.MACK) 之类的方法将所有在其制造列表中具有此制造的卡车提供给我。这个电话给了我这个错误:

No property found for name [make] for class [class Truck]

有什么想法吗? Grails 1.2.2。

【问题讨论】:

  • 您的查询中有错字。试试 Truck.findByMakes(Make.MACK)

标签: grails grails-orm


【解决方案1】:

这很棘手,动态查找器不支持。我也不知道如何使用 Criteria 查询来做到这一点,但 HQL 会是

def mackTrucks = Truck.executeQuery(
   'select t from Truck t left join t.makes make where make=:make',
   [make: Make.MACK])

【讨论】:

  • 谢谢伯特,这很奏效。可惜没有漂亮的圣杯方式。
  • 自 2011 年以来 Grails 是否有任何更新以支持动态查找器中的这一功能?
【解决方案2】:

您可以使用标准查询使答案为her in the forum,但您必须对其进行自定义。可能是这样的:

Truck.createCriteria.list ={makes{eq('name', Make.MACK)}
}

我认为每个 Enum 都有属性名称。

【讨论】:

    最近更新 更多