中野さん
ありがとうございます!
そしてすみませんでした・・・まさかコードが間違っているだけとは・・・。もっと査読するべきでした。
当初の疑問の「子側だけで保存ができるのはどうなの?」という点に関して、そもそもなぜそんな疑問に至ったかというと、多対1の場合、以下のコードが考えられます。
---------------------------------------------------------------
class Author {
String name
Book book
static constraints = {
}
}
class Book {
String title
static belongsTo = [author:Author]
static constraints = {
}
}
---------------------------------------------------------------
この状態だと、子側(Book)のみの保存が出来ませんでした。
そのため、belongsToを指定すると、子側のみでは保存・削除は出来なくなるのだな、と思い込んでしまっていました。
ちなみにこの場合、Book側のconstraintsを、
static constraints = {
author blank: true, nullable: true
}
にすると、子側(Book)のみで保存が出来ることを確認しました。
ちなみにconstraintsを付けなかった場合のエラーの内容は下記のとおりです。
groovy:000> > book.errors.allErrors.each{println it}
book.errors.allErrors.each{println it}
Field error in object 'grailssamples.Book' on field 'author': rejected value [null]; codes [grailssamples.Book.author.nullable.error.grailssamples.Book.author,grailssamples.Book.author.nullable.error.author,grailssamples.Book.author.nullable.error.grailssamples.Author,grailssamples.Book.author.nullable.error,book.author.nullable.error.grailssamples.Book.author,book.author.nullable.error.author,book.author.nullable.error.grailssamples.Author,book.author.nullable.error,grailssamples.Book.author.nullable.grailssamples.Book.author,grailssamples.Book.author.nullable.author,grailssamples.Book.author.nullable.grailssamples.Author,grailssamples.Book.author.nullable,book.author.nullable.grailssamples.Book.author,book.author.nullable.author,book.author.nullable.grailssamples.Author,book.author.nullable,nullable.grailssamples.Book.author,nullable.author,nullable.grailssamples.Author,nullable]; arguments [author,class grailssamples.Book]; default message [Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein]
===> [Field error in object 'grailssamples.Book' on field 'author': rejected value [null]; codes [grailssamples.Book.author.nullable.error.grailssamples.Book.author,grailssamples.Book.author.nullable.error.author,grailssamples.Book.author.nullable.error.grailssamples.Author,grailssamples.Book.author.nullable.error,book.author.nullable.error.grailssamples.Book.author,book.author.nullable.error.author,book.author.nullable.error.grailssamples.Author,book.author.nullable.error,grailssamples.Book.author.nullable.grailssamples.Book.author,grailssamples.Book.author.nullable.author,grailssamples.Book.author.nullable.grailssamples.Author,grailssamples.Book.author.nullable,book.author.nullable.grailssamples.Book.author,book.author.nullable.author,book.author.nullable.grailssamples.Author,book.author.nullable,nullable.grailssamples.Book.author,nullable.author,nullable.grailssamples.Author,nullable]; arguments [author,class grailssamples.Book]; default message [Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein]]
groovy:000>
まだまだ勉強中ではありますが、GORMは複雑だな・・・というのが正直なイメージです。
複雑というよりも、今までORマッパーを使わずに逃げてきた自分にはなかなか厳しいといった方が正しいかも?
ググるとブログなどで素晴らしい記事は沢山あるのですが、中々チュートリアル的なものが見つからなくて大変です。
このまま調査を続けて、いつかGORMの逆引き資料みたいなのを作ってみたいなと思います。
ありがとうございました!