私はいくつかの作業コードを持っていますが、GORM とカスケード保存については少し曖昧です。ここに私のオブジェクトモデルがあります:
class Profile {
PhotoAlbum photoAlbum
static constraints = {
photoAlbum(nullable:true)
}
}
class PhotoAlbum {
static hasMany = [photos:Photo]
static belongsTo = [profile:Profile]
}
class Photo {
static belongsTo = PhotoAlbum
}
そして、ここに新しい写真オブジェクトを保存するための私の作業コードがあります:
Photo photo = new Photo()
if (!profile.photoAlbum) { profile.photoAlbum = new PhotoAlbum(profile:profile) }
profile.photoAlbum.addToPhotos(photo)
if (!photo.save()) {
def json = [
status:'fail',
message:messageSource.getMessage('label.photo.validate.failed.message', [photo.errorStrings].toArray(), LocaleContextHolder.locale)
]
return json
}
if (!profile.photoAlbum.save()) {
def json = [
status:'fail',
message:messageSource.getMessage('label.photo.validate.failed.message', [profile.photoAlbum.errorStrings].toArray(), LocaleContextHolder.locale)
]
return json
}
if (!profile.save()) {
def json = [
status:'fail',
message:messageSource.getMessage('label.photo.validate.failed.message', [profile.errorStrings].toArray(), LocaleContextHolder.locale)
]
return json
}
else {
def json = [
status:'success',
message:messageSource.getMessage('label.photo.insert.success.message', null, LocaleContextHolder.locale)
]
return json
}
新しい写真オブジェクトを保存するには、大量のコードとエラー チェックのように思えます。Web サイトや本で grails の例を見ても、エラー チェックがあまり行われていません。私の場合、写真を保存できない場合、サービスは json エラー文字列をクライアントに返す必要があります。GORM Gotchas 2 の投稿を読みましたが、カスケード セーブについてはまだよくわかりません。
photo.save() と profile.photoAlbum.save() を呼び出さずに profile.save() を呼び出すと、一時的な例外が発生することがわかりました。だから私は photo.save() と profile.photoAlbum.save() を追加して、すべてを機能させました。