2013-05-24 2 views
0

부모 개체와 자식 개체가 2 개 있다고 가정합니다. 그들 사이의 관계는 하위 -> 상위 = many-to-one입니다. 즉, 여러 하위 개체가 동일한 부모와 연결할 수 있습니다.최대 절전 모드 : 자식 컬렉션의 케스케이드 삭제

자식 개체가 부모 개체에 대한 참조를 보유하고있는 동안 부모 개체 에 자식 필드를 지정하기위한 필드가 없음이 없습니다.

자식 매핑에서 many-to-one 요소를 갖는 최대 절전 모드에서; 부모 개체는 모든 Child 개체를 참조하는 컬렉션 필드를 가질 필요가 없으므로 부모 매핑에 일대 다 항목이 포함되어 있지 않습니다.

이제 부모가 삭제되면 오라클은 엔티티가 참조 할 하위 엔티티가있는 동안 엔티티를 삭제할 수 없다는 예외를 throw합니다.

이 개체 모델을 사용하면 부모 개체가 삭제되면 부모 개체에 속한 모든 자식 개체를 안전하게 삭제할 수 있습니까?

답변

1

1> 자식 < -> 부모에게 양방향 매핑을 만듭니다. 언급 캐스케이드 삭제.

2> 누가이 부모의 자식 개체인지 알고 있으면이 부모의 모든 자식을 먼저 삭제 한 다음 부모를 삭제하려고 시도합니다.

편집 :

확인이 예제 링크

Hibernate Bidirectional Example

+0

에서 변경합니다. – preeze

+0

양방향 관계 선박을 만들기 위해 부모는 자녀에 대한 refference를 얻지 않습니다. – NPKR

+0

이 질문을 게시하기 전에 예를 확인했습니다. 예제에서 볼 수있는 것처럼 팀은 "선수"필드를 정의합니다. – preeze

1

클래스의 부모

import java.util.Set; 

    import javax.persistence.*; 

    @Entity 
    @Table(name = "Parent") 
    public class Parent{ 

     @Id 
     @GeneratedValue 
     private Integer id; 

     private String name; 

     @OneToMany(mappedBy="Child", cascade=CascadeType.ALL) 
     private Set<Child> child; 
} 

수입 javax의 아이라는 두 번째 클래스를 고려한다. 고집.*;

@Entity 
@Table(name = "Child") 
public class Child{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String lastname; 

    @ManyToOne 
    @JoinColumn(name = "id") 
    private Parent parent; 
} 

은 당신의 POJO의 적절하게 던져하지 않습니다 예외 것은 내가 단순히 캐스케이드 삭제를 위해 부모 객체에 대한 새로운 "어린이"필드를 소개하지 않을 것입니다

+0

부모가 " 아동을 입력하십시오."라는 필드를 포함해서는 안된다는 사실을 명확하게 밝히지 않았을 수 있습니다. 하지만이 솔루션은 내가 찾고있는 100 %가 아니므로 귀하의 예에서는 실제로 가지고 있습니다. – preeze

+0

이 방법으로해야 할 manyToone 관계를 구현하려면 –

관련 문제