我在實體 - RentalUnit和Review之間建立了一對多的關係。所有的測試運行正常,但在我加入相同的審查,以不同RentalUnit情況如下:如何確保真正的一對多關係
def review3 = Review.build().save(flush: true)
def rentalUnit2 = RentalUnit.build().
addToReviews(review2).addToReviews(review3).save(flush: true)
assert rentalUnit.reviews.contains(review2)
看來,格姆和addTo*
方法似乎並不關心,如果我加入相同的審查情況,所以我猜測我的域類中缺少一些東西。那會是什麼?
感謝您的幫助
p.s.
class Review {
String submittedBy
String content
String dateReceived
boolean isApproved
static belongsTo = RentalUnit
static mapping = {
content type: 'text'
}
static constraints = {
submittedBy blank: false, size: 3..50
content blank: false, size: 5..2500
}
}
class RentalUnit {
String name
String nickname
Address address
static hasMany = [reviews:Review]
static mapping = {
reviews cascade: "all-delete-orphan"
}
static constraints = {
name blank: false, unique: true, size: 4..10
nickname blank: false, size: 5..60
}
}
謝謝你Victor。請糾正我,但這意味着它實際上不是真正的一對多關係,因爲相同的審查實際上引用了兩個不同的RentalUnits(如果共享審閱更新,它會更新兩個不同的RentalUnits審閱集合)。因此,爲了實現真正的一對多關係,我們必須檢查是否在另一個租賃單位中沒有引用針對特定租賃單位添加的審查...因爲有任何內置機制(即約束等)或者我們通過每個RentalUnit.reviews集合手動旅行,這可能非常昂貴... – latvian
物理上,'Review'中只有一個對'RentalUnit'的引用。 'belingsTo'創建一個隱式字段,'Review.rentalUnit',您可以查看(http://grails.org/doc/latest/ref/Domain%20Classes/belongsTo.html)。希望我的問題得到了解決。 –
謝謝你Victor。我很感激。英語不是我的第一語言,所以我道歉不能清楚地表達我自己。 RentalUnit中的One-to-Many與ReviewUnit中的One-to-Many之間的關係== RentalUnit中的多對一,對嗎?然而,特定的共享審查指向的不止是一個RentalUnit,除非我們在添加對RentalUnit的審覈時手動執行。這是有道理的嗎?在我的理性中是否有錯誤... ... thnks – latvian