0

我在 RentalUnit 和 Review 之间有多对多的关系(入住多个出租单元的客人可能会有评论)。从 RentalUnit 到 Review 的 Delete 有级联,但从 Review 到 RentalUnit 没有级联

在进行测试时,我发现 GORM 会话中存在以下不一致

def review2 = new Review(rentalUnits: [rentalUnit], ...., isApproved: false).save(flush: true) review2.addToRentalUnits(rentalUnit2)

“rentalUnit2”对象将关联到“review2”,而“rentalUnit”则没有。

在此处输入图像描述

在初始化时或通过 addTo* 传递 RentalUnit 对象时如何确保一致的会话?

ps 这里是完整的代码 class Review { String submitBy String content String dateReceived boolean isApproved

final static DateFormat DATEFORMAT  = DateFormat.getDateInstance(DateFormat.MEDIUM)

static belongsTo = RentalUnit
static hasMany = [rentalUnits: RentalUnit]

static mapping = {
    rentalUnits cascade: "none"
}

static constraints = {
    submittedBy blank: false, size: 3..50
    content blank: false, size: 5..255
    dateReceived blank: false, size: 11..12, validator: {
        try{
            Date date = DATEFORMAT.parse(it)
            return DATEFORMAT.format(date) == it
        }catch(ParseException exception){
            return false
        }
    }
    rentalUnits nullable: false
}

}

class RentalUnit { String name String 昵称 Address address static hasMany = [reviews:Review]

static mapping = {
reviews cascade: "all-delete-orphan"
}

static constraints = {
    name blank: false, unique: true
    nickname blank: false
}

}

4

1 回答 1

1

你的答案就在你的问题中——使用addToRentalUnits。它做了三件事;如果集合为空,它会将集合初始化为一个新的空集合(对于新的非持久性实例,情况将如此,但对于数据库中始终具有非空(但可能为空)集合的持久性实例则不然),添加实例到集合,并设置对包含实例的反向引用。只需设置集合数据即可完成前两件事。

于 2012-10-03T18:44:57.817 回答