나는 분명히 작동하기 때문에 내가 뭔가 잘못하고 있다고 확신한다. 간체 수업 :grails 2.5.1 removeFrom 이상한 동작 (제거하지 않음)을주는 일대 다
class Person {
String name
static hasMany = [cats:Cat]
}
class Cat {
String name
Person person
static belongsTo = Person
static constraints = {
person(nullable:false)
}
String toString() {
"${person.name}-${name}"
}
}
간단한 물건, 사람은 많은 고양이가 있고, 고양이는 단 한 사람에게만 속해야합니다.
는 지금은 서비스 클래스에 다음, 나는 이상한 결과를 얻을 않는 경우 :
delete(Cat cat) {
Person owner = cat.person
log.debug("Cats before removing ${cat} (id=${cat.id}): ${owner.cats} -- ${owner.cats*.id}")
owner.removeFromCats(cat);
log.debug("Removed from owner ${owner}, owner now has ${owner.cats} -- ${owner.cats*.id}")
log.debug("Cat to delete is now: ${cat} and belongs to... ${cat.person}")
cat.delete(flush:true)
}
을 그리고 오류 ", 개체가 다시 저장 될 저쩌구"이상한 비트
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)
입니다 이다 디버그 결과, "밥"에 의해이 소유 고양이 "푹신한"을 제거하기 위해 전화했을 때 : 무슨 무슨
Cats before removing Bob-Fluffy (id=1356): [Bob-Fluffy] -- [1356]
Removed from owner Bob, owner now has [null-Fluffy] -- [1356]
Cat to delete is now: null-Fluffy and belongs to... null
"removeFrom"실제로 컬렉션에서 개체를 제거하지 않습니다? 나는 청소하고 다시 컴파일했다. 왜 내가이 객체를 삭제할 수 없는지에 대한 손실이 꽤 큽니다.
더 깨끗한 코드이지만 변경을해도 내 문제가 해결되지 않았습니다. – Trebla
고양이를 지울 때 flush : true 옵션을 제거 할 수 있습니까? –
거기에 행운이 없다 ... 삭제 단계를 성공적으로 통과했지만 트랜잭션이 플러시를 일으키는 다음 번에 같은 오류가 발생합니다. – Trebla