2017-04-05 18 views
3

다음과 같은 모델이 있습니다. 기사에 몇 개의 태그가 있고 태그가 일부 기사에있을 수 있습니다. 는 그래서 3 개 테이블 대다 관계 :JPA를 사용하여 조인 테이블에서 행을 삭제하는 방법

  • ARTICLE_TAG
  • TAG

내가 태그를 삭제하면, 내가 삭제할 :

  • 태그의 태그
  • 태그와 th 사이의 모든 관계 전자 기사에 기사 태그가 지정되었습니다.

하지만 기사의 기사를 삭제하고 싶지는 않습니다.

어떻게하면됩니까?

나는 이것을 시도,하지만 작동하지 않습니다

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
for (Article article : tagToDelete.getArticles()) { 
    article.getTags().remove(tagToDelete); 
} 
session.delete(tagToDelete); 

감사합니다!

@Entity 
@Table(name="ARTICLE") 
public class Article extends AbstractAuditedEntity { 

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

    @ManyToMany 
    @JoinTable(name="ARTICLE_TAG", [email protected](name = "ARTICLE_ID"), [email protected](name = "TAG_ID")) 
    private Set<Tag> tags = new HashSet<>(); 

    public Article() {} 

    /** Getters & Setters */ 
} 

@Entity 
@Table(name="TAG") 
public class Tag { 

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

    @ManyToMany(mappedBy="tags") 
    private Set<Article> articles = new HashSet<>(); 

    public Tag() {} 

    /** Getters & Setters */   
} 
+0

알아 냈습니까? –

+0

테이블을 어떻게 만드나요? 최대 절전 모드 2 ddl 사용 하시겠습니까? –

답변

0

해결책을 찾았습니다. 삭제할 때, 우리는 기사에 대한 삭제를 계단식으로하지 말아야하며 그 반대도 마찬가지입니다.

@ManyToMany(cascade={PERSIST, DETACH}) 
@JoinTable(name="ARTICLE_TAG", [email protected](name = "ARTICLE_ID"), [email protected](name = "TAG_ID")) 
private Set<Tag> tags = new HashSet<>(); 

내 문제는 기본적으로 포함 된 태그에 대한 문서의 삭제를 계단식으로합니다 CascadeType.REMOVE을 포함 CascadeType.All을 사용했다.

태그 엔티티에 cascade={PERSIST, DETACH}을 추가하여 태그 삭제를 방지하여 관련 아티클을 삭제할 수도 있습니다.