Gorm级联操作
Gorm cascaded operations
我正在尝试了解 GORM 的级联删除。这是没有任何修饰符的默认 GORM 行为。我了解如果域 class Owner
的拥有实例拥有 Owned
域 class 的多个实例,那么当 Owner
实例被删除时,所有拥有的实例也将被删除。但是,如果拥有的实例同时由两个不同的 Owners
拥有并且只有一个 Owner
被删除怎么办。拥有的实例会不会被删除,因为它们仍然属于另一个未删除的所有者?
编辑: 我实际上尝试执行实验(至少是它的第一部分)但我没有达到预期的结果。作为新手,我很确定我做错了什么。就是不知道。
class MainController {
def index() {
// creating a few instances of the owned domain class
def owneda = new Owned(name: 'Owned A')
def ownedb = new Owned(name: 'Owned B')
def ownedc = new Owned(name: 'Owned C')
// now we make these instances belong to an instance of OwnerA
// first we create an instance of OwnerA
def ownerA = new OwnerA(name: 'Owner A')
// then we give it ownership of all the instances of Owned that we created
ownerA.addToOwned(owneda)
ownerA.addToOwned(ownedb)
ownerA.addToOwned(ownedc)
// now we save the owner instance
ownerA.save(flush: true)
// now we see how many instances of both Owners and Owned are in our db
println "The number of Owner As in existence are: " + OwnerA.count()
println "The number of Owned in existence are: " + Owned.count()
// Now we delete the owner instance
ownerA.delete(flush: true)
// now we see how many instances of both Owners and Owned are in our db after the deletion
println "After deletion of the OwnerA instance..."
println "The number of Owner As in existence are: " + OwnerA.count()
println "The number of Owned in existence are: " + Owned.count()
}
}
我确实将 belongsTo
放在我的 class 中,将 hasMany
放在我的所有者 class 中。
输出:
...........The number of Owner As in existence are: 0
The number of Owned in existence are: 0
After deletion of the OwnerA instance...
The number of Owner As in existence are: 0
The number of Owned in existence are: 0
Hibernate 不支持 "ON DELETE SET NULL" 级联。因此,如果您拥有的对象由多个所有者拥有,如果您删除其中一个所有者,则拥有的对象将不会被删除。
您很可能会得到 "InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade" 或 FK 约束违反异常
看到这个similar question
我正在尝试了解 GORM 的级联删除。这是没有任何修饰符的默认 GORM 行为。我了解如果域 class Owner
的拥有实例拥有 Owned
域 class 的多个实例,那么当 Owner
实例被删除时,所有拥有的实例也将被删除。但是,如果拥有的实例同时由两个不同的 Owners
拥有并且只有一个 Owner
被删除怎么办。拥有的实例会不会被删除,因为它们仍然属于另一个未删除的所有者?
编辑: 我实际上尝试执行实验(至少是它的第一部分)但我没有达到预期的结果。作为新手,我很确定我做错了什么。就是不知道。
class MainController {
def index() {
// creating a few instances of the owned domain class
def owneda = new Owned(name: 'Owned A')
def ownedb = new Owned(name: 'Owned B')
def ownedc = new Owned(name: 'Owned C')
// now we make these instances belong to an instance of OwnerA
// first we create an instance of OwnerA
def ownerA = new OwnerA(name: 'Owner A')
// then we give it ownership of all the instances of Owned that we created
ownerA.addToOwned(owneda)
ownerA.addToOwned(ownedb)
ownerA.addToOwned(ownedc)
// now we save the owner instance
ownerA.save(flush: true)
// now we see how many instances of both Owners and Owned are in our db
println "The number of Owner As in existence are: " + OwnerA.count()
println "The number of Owned in existence are: " + Owned.count()
// Now we delete the owner instance
ownerA.delete(flush: true)
// now we see how many instances of both Owners and Owned are in our db after the deletion
println "After deletion of the OwnerA instance..."
println "The number of Owner As in existence are: " + OwnerA.count()
println "The number of Owned in existence are: " + Owned.count()
}
}
我确实将 belongsTo
放在我的 class 中,将 hasMany
放在我的所有者 class 中。
输出:
...........The number of Owner As in existence are: 0
The number of Owned in existence are: 0
After deletion of the OwnerA instance...
The number of Owner As in existence are: 0
The number of Owned in existence are: 0
Hibernate 不支持 "ON DELETE SET NULL" 级联。因此,如果您拥有的对象由多个所有者拥有,如果您删除其中一个所有者,则拥有的对象将不会被删除。
您很可能会得到 "InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade" 或 FK 约束违反异常
看到这个similar question