Я обнаружил, что пытаться заставить некоторые вещи работать в Grails из устаревших приложений, использующих GORM, не самая простая вещь.Вы можете найти решение, которое подходит для 99% ваших проблем, но вы потратите гораздо больше времени, пытаясь найти легкую кнопку для последних 1% проблем (таких как ваша).Я думаю, что вы могли бы сделать это, используя переходное поле в качестве ключа что-то вроде ( обратите внимание, что есть два решения, я рекомендую второе ) ...
class Season {
static mapping = {
seasonWeeks mapKey: 'weekOfYearAsString'
}
static hasMany = [seasonWeeks:SeasonWeek]
Map seasonWeeks = [:]
}
class SeasonWeek{
...
String name
Integer weekOfYearAsInt
String weekOfYearAsString
String getWeekOfYearAsString(){
return String.valueOf(weekOfYearAsInt);
}
void setWeekOfYearAsString(def value){
this.weekOfYearAsInt = Integer.parseInt(value);
}
}
ТАКЖЕ Вы можете полностью избежать GORM ( что бы я сделал ) и просто справиться с построением карты в своем классе Season ...
class Season{
...
public Map getSeasonWeeksMap(){
Map map = [:]
def seasons = SeasonWeek.findBySeason(this.id)
season.each(){season ->
map.put(season.id, season)
}
return map
}
}