我使用grails 2.0.0。我有三個對象成員,產品和ProductType。會員有許多產品,並且是一對多的關係。 Product指向ProductType(參考表)並且是多對一的關係。我的問題是關於刪除產品。它適用於一種情況,而不適用於另一種情況。請繼續閱讀。複合鍵上的Grails一對多映射stalestaleexception
下面的映射的粗線條:
Member.groovy:
class Member {
Long id
....
SortedSet products
static hasMany = [products:Product]
static mapping = {
table 'T_MEMBER'
id column:'MEMBER_ID'...
products cascade: "all-delete-orphan"
}
}
Product.groovy:
class Product {
Long id
ProductType productType
...
static belongsTo = [member:Member]
static mapping = {
table 'T_PRODUCT'
id column:'PRODUCT_ID'
member column: 'MEMBER_ID'
productType column: 'PRODUCT_TYPE'
...
}
}
ProductType.groovy:
class ProductType {
Long id
..
static mapping = {
table 'T_PRODUCT_TYPE'
id column:'PRODUCT_TYPE', generator:'assigned'
...
}
}
我得到了客戶服務代碼的輪廓......
if((newMember.products) && (newMember.products.size() >0)) {
def addList = newMember.products - existingMember.products
def removeList = existingMember.products- newMember.products
removeList.each { product ->
existingMember.removeFromProducts(product)
}
addList.each {product ->
existingMember.addToProducts(product)
}
}
到目前爲止好。這是完美的。然而,當我做介紹複合主鍵的表T_PRODUCT如下:
static mapping = {
table 'T_PRODUCT'
//id column:'PRODUCT_ID'
id composite:['member', 'productType']
member column: 'MEMBER_ID'
productType column: 'PRODUCT_TYPE'
...
}
我得到這個:
org.hibernate.StaleStateException:批量upda批量更新返回從更新 意想不到的行數[0];實際行數:0;預計:1 org.hibernate.StaleStateException:批量更新返回意外 行計數從更新[0];實際行數:0;預期:1在 ProductService.cleanUpGorm(ProductService.groovy:442)在 ProductService.maintainProduct(ProductService.groovy:213)在 ClientService $ _maintainMembers_closure5.doCall(ClientService.groovy:158) 在ClientService.maintainMembers(ClientService.groovy :152)在 ClientService.processMembers(ClientService.groovy:394)
任何想法,我可能會去錯了嗎?
你是不是指靜態belongsTo = [member:成員] 而不是靜態belongsTo = [member:Product]? – loteq
這是一個錯字。糾正它。謝謝。 – arrehman
是否可以提供測試用例? –