开发者

grails gorm - not usual one-to-many association - bug found?

first of all: i am not a beginner in grails. I used a one-to-many association many times. Maybe the problem is happening because it's not a us开发者_开发技巧ual use.

The code:

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)
}

as you can see. i am using the Class "result" 4-times as a one to many association to the same class "filter"

grails creates the table "result" with a foreign key "filter_id" to reference to the associated filter. But no difference is made if its the "normal"/ "longerDates" .... association. As a result when i query

def results = filter.normal

or

def results =filter.longerDates

i get the same results. although i saved the results right

filter.addToNormal(new Result(..))

and

filter.addToLongerDates(new Result(..))

the next thing i tried was deleting the belongs_to association from the result to the filter. Although i wanted to implicitly delete all results of a filter when the filter is deleted...

the result was a "result" table as i wanted it. 4 attributes called "normal" "longer_dates", "location_Reduce_1" and "location_Reduce_2". when i saved a "normal" result the attribute in the table contained the filter id to which the result belongs. the other attributes (like longerDates" had the null value). so far so good. the strange thing that i was only able to save ONE result per filter although i had a has_many attribute in the "filter" class

has anybody any idea what i am doing wrong?


I think you should use the mappedBy property in Filter class

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]
}

The reference is here

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜