1

트리처럼 부모 자식 관계를 캡처하는 테이블을 만들려고합니다. 이 구조체 "id"와 "parent"를 포착하기 위해 두 개의 열만 유지하려고합니다. 행을 삭제할 때 데이터베이스에서 모든 하위 항목을 계단식으로 삭제할 수 있어야합니다. 아래는 내가 생성 한 Hibernate Entity입니다. 그러나 주석을 추가했습니다. @OnDelete(action = OnDeleteAction.CASCADE)ON DELETE CASCADE은 테이블이 Hibernate에 의해 생성 될 때 테이블에 추가되지 않습니다.Hibernate @OnDelete cascade 같은 테이블

이것은 버그입니까? 아니면 내가 누락되었거나 이해하지 못하는 것이 있습니까?

@Entity 
public class Tree { 

    @Id 
    @Column(name = "id", nullable = false) 
    private Long id; 

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "parent", nullable = true) 
    private List<Tree> children; 

    @ManyToOne 
    @OnDelete(action = OnDeleteAction.CASCADE) 
    @JoinColumn(name = "parent", nullable = false) 
    private Tree parent; 

    public Tree(Long id) { 
     this.id = id; 
    } 

    public Tree() { 
    } 

    public Long getId() { 
     return id; 
    } 

    protected void setId(Long id) { 
     this.id = id; 
    } 

    public List<Tree> getChildren() { 
     return children; 
    } 

    public void setChildren(List<Tree> children) { 
     this.children = children; 
    } 

    public Tree getParent() { 
     return parent; 
    } 

    public void setParent(Tree parent) { 
     this.parent = parent; 
    } 
} 
+0

'@ OneToMany' 컬렉션에'orphanRemoval = true'을 넣으려고 했습니까? ('@ ManyToOne'에 ** NOT **)? –

+0

안녕하세요, Pitor, 나는 그것을 시도했지만 "ON DELET CASCADE"는 여전히 테이블에 추가되지 않습니다. –

답변

5

@OnDelete@OneToMany 측에 사용해야합니다

@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent") 
@OnDelete(action = OnDeleteAction.CASCADE) 
private List<Tree> children; 

은 또한 당신이 mappedBy를 놓친 - 그것은 양방향 관계가 필요합니다.

+0

Thany 당신, 그게 효과가! ;' –

+0

@'@OneToMany @OnDelete (액션 = OnDeleteAction.CASCADE) 개인 목록 어린이 (= FetchType.EAGER, mappedBy = "부모"를 가져 오기를) : 그것은 다음과 같습니다 그래서 나는 @JoinColum 주석을 제거해야 Ali : 네, 양방향 관계의'@ JoinColumn'은'@ ManyToOne'쪽에 위치해야합니다. – axtavt