2012年10月1日 星期一

Grails 的ORM 關聯(一) belongsTo, hasMany

我們直接舉1對1,或是1對多的例子。

一對多來說,一個作者可以發表多篇文章。
那這個關聯我們要從哪邊開始加?我們可以先在「文章」(多)中先加 belongsTo。
文章「屬於」作者。這個應該沒有疑問。

class Post {
  String content
  Date dateCreated
  static constraints = {
   content(blank: false)

  }
  static belongsTo = [ user : User ]
}

最後的 static belongsTo = [ user : User ] 當然是我們注意的重點。
這個 [ user : User ] 其實是一個map,不過一個小寫的user ,一個大寫的 User有何用處?
這個user是給我們用做參考關聯的。透過這個寫法,Post 也可以反著查詢 User了。

例如有一個畫面是閱讀某人寫的文章,最上面需要出現那個人的id。因為我們在這裡已經建立好倒回去關聯 User 時的變數名稱 「user」,所以只要 post.user.userId 便很快的可以得到我們要的結果。

你可能也看過
static belongsTo = User 
的寫法,如果這樣寫的話,post 就不能反過來查到對應的 user了。如果沒有必要從 Post 反查 User 時,這樣寫當然有一點效能上的優勢。

belongsTo 還有要注意的一點,既然都說自己「屬於」別人了,所以當 User 從資料庫上被幹掉的同時,Post 也沒有任何存在的必要了。這個就是「屬於」的觀念。
當然在 User 這個類別上,也要記得加上
static hasMany = [ post : Post ]
如此一來關聯就正式接上了。接上之後有很多預設的神奇招式,在下一章會講到。

沒有留言:

張貼留言