[Hibernate] "A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance"

by 스뎅(thDeng) on

JPA entity안에 있는 list를 바꿔서 저장했더니 갑자기 이런 오류가 뙇!!

"A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance"

수정하는 코드는 요렇게..

List<String> names = new ArrayList<String>();
names.add("ABCD");
names.add("EFGH");
names.add("IJHL");
holder.setNames(names);

원인이 뭘까??

names 라는 list는 새로 만든 녀석이다. 새로 만들어진 친구는 hibernate가 관리하지 않아서 문제가 된다고 한다. http://stackoverflow.com/questions/5587482/hibernate-a-collection-with-cascade-all-delete-orphan-was-no-longer-referenc

list를 바꾸고 싶으면 새 list를 만들어서 set하지 말고, 내용(content)을 지우고 새로 넣자.

holder.getNames().clear();
holder.getNames().addAll(names);

name을 바로 건드리지 말고, 이런 편의 메서드를 추가해도 좋을듯 (상황에 따라..)

public void setNames(List<String> names) {
    this.names.clear();
    this.names.addAll(names);
}
public void addName(String name) {
    names.add(name);
}
public void removeName(String name) {
    names.remove(name);
}
별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License