我使用 grails 2.0.0。我有三个对象 Member、Product 和 ProductType。成员有许多产品,并且是一对多的关系。Product 指向 ProductType(参考表)并且是多对一的关系。我的问题是关于删除产品。它适用于一种情况,而不适用于另一种情况。继续阅读。
以下映射的粗略轮廓:
成员.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"
}
}
产品.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:批量更新批量更新从更新[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)
知道我哪里可能出错了吗?