0
對不起,我不能爲這個問題想出一個更好的標題,但給了我最好的拍攝。我有域類User
和Post
-a user
有許多posts
,並且post
屬於用戶,如下所示。Grails:如何在其他域中「訪問」域類實例變量?
class User {
String name
static hasMany = [ posts : Post ]
static constraints = { }
}
class Post {
String content
static belongsTo = [ user : User ]
static constraints = { }
}
我有另一個域類Status
如下。
class Status {
Boolean isActive
static constraints = {
}
}
每個user
和post
有status
,我想知道如何實現?我能想到這樣做的不同的方法夫婦是:
- 繼承:讓
User
和Post
延長Status
,並在Status
使用static mapping = { tablePerHierarchy false }
。然後User
和Post
會自動繼承Status
的實例變量(並且它們會保存在單獨的表中)。然而,這種方法似乎並不合適,因爲User
和Post
實際上並不是Status
。 - 我可以重新定義
Status
實例變量在User
和Post
,然後做這樣的事情在User
和Post
static constraints = { importFrom Status // other constraints }
問題:
- 是一種方法好過其他?
- 有沒有更好的方法來實現這一目標?
- Grails專家可以推薦哪些最佳實踐?
注:Status
域有很多實例變量(什麼是這裏介紹的是一個精簡版),我需要「訪問」的情況下,從許多其他領域變量(User
,Post
,和許多其他) 。否則,我可能會騎上Status
域,只需分別在User
和Post
中定義這些實例變量。上面提到的方法2是這樣做的,除了它通過使用importFrom Status
節省重新輸入約束。
謝謝Rami。其實我的意思是在'User'和'Post'中都包含'Boolean isActive'而不是'Status status'。在這種情況下,我需要'importFrom Status'來處理約束。但我想我明白你的意思。雖然,如果我在'User'和'Post'中聲明'Status status',並且執行'def user = new User(name:「my name」,status:new Status(isActive:true))''和'user。保存(failOnError:true,flush:true)',代碼失敗時會說'NULL不允許列'STATUS_ID「'!所以我肯定錯過了一些東西。任何澄清將不勝感激! – tikka
好的,我想我明白了。在保存用戶user.save(failOnError:true,flush:true)'之前,我必須顯式地保存狀態'status.save(failOnError:true,flush:true)',並且它工作正常。謝謝! – tikka
太棒了!另外,如果您是Grails的新手,那麼我建議您閱讀關於關係中級聯和所有權的信息。很高興我能夠提供幫助。 –