首先:我不是grails的初学者。我多次使用一对多关联。也许问题正在发生,因为它不是常用的。
代码:
class Filter {
static hasMany = [normal:Result, longerDates:Result, locationReduce1:Result, locationReduce2:Result]
}
class Result {
int score
static belongsTo = [user:User, filter:Filter]
static constraints = {
user(nullable:false, blank:false)
score(nullable:false)
}
你可以看到我使用类“结果”4次作为一对多关联到同一类“过滤器”
grails使用外键“filter_id”创建表“result”以引用关联的过滤器。但如果它的“正常”/“更长的日期”......关联没有区别。结果当我查询
def results = filter.normal
或
def results = filter.longerDates
我得到了相同的结果。虽然我保存了正确的结果
filter.addToNormal(new Result(..))
和
filter.addToLongerDates(new Result(..))
我尝试的下一件事是从结果中删除belongs_to关联到过滤器。虽然我想在删除过滤器时隐式删除过滤器的所有结果...
结果是我想要的“结果”表。 4个属性称为“normal”“longer_dates”,“location_Reduce_1”和“location_Reduce_2”。当我保存“正常”结果时,表中的属性包含结果所属的过滤器ID。其他属性(如longerDates“具有空值)。 到现在为止还挺好。奇怪的是,我只能在每个过滤器中保存一个结果,尽管我在“过滤器”类中有一个has_many属性
有谁知道我做错了什么?
答案 0 :(得分:3)
我认为你应该在Filter类
中使用mappedBy属性class Filter {
static hasMany = [normal:Result, longerDates:Result, locationReduce1:Result, locationReduce2:Result]
static mappedyBy = [normal: "normalFilter", longerDates: "longerDatesFilter", locationReduce1: "locationReduce1Filter", locationReduce2: "locationReduce2Filter"]
}
class Result {
static belongsTo = [normalFilter: Filter, longerDatesFilter: Filter, locationReduce1: Filter, locationReduce2Filter: Filter]
}
引用为here