0

RentalUnitとReviewの間には多対多の関係があります(複数のレンタルユニットに滞在するゲストにはレビューがある場合があります)。RentalUnitからReviewへのカスケードはありますが、ReviewからRentalUnitへのカスケードはありません。

テストで作業しているときに、GORMセッションで次の不整合が見つかりました

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

'rentalUnit2'オブジェクトは'review2'に関連付けられますが、'rentalUnit'は関連付けられません。

ここに画像の説明を入力してください

初期化時またはaddTo*を介してRentalUnitオブジェクトを渡すときに、一貫したセッションを確保するにはどうすればよいですか?

psここに完全なコードクラスがありますレビュー{文字列submitedBy文字列コンテンツ文字列dateReceivedブール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
}

}

classRentalUnit{文字列名文字列ニックネームアドレスアドレスstatichasMany= [reviews:Review]

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

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

}

4

1 に答える 1

1

あなたの答えはあなたの質問にあります - を使用してくださいaddToRentalUnits。3 つのことを行います。null の場合、コレクションを新しい空のコレクションに初期化します (これは新しい非永続インスタンスの場合ですが、常に非 null (ただし空の可能性がある) コレクションを持つデータベースからの永続インスタンスの場合は当てはまりません)、追加します。インスタンスをコレクションに設定し、それを含むインスタンスへの後方参照を設定します。コレクション データを設定するだけで、最初の 2 つのことが行われます。

于 2012-10-03T18:44:57.817 に答える