2014-03-28 5 views
2

두 개의 엔티티가 있고 다 대다 관계가 있는데, 하나의 엔티티를 삭제하면 엔티티를 삭제할 때 엔 조인 테이블에서 엔트리를 참조하는 모든 엔트리를 삭제해야합니다. 잘. 어떻게해야합니까? 소유 기업에 대한ManyToMany - Join 테이블의 항목을 삭제합니다.

@JoinTable(name = "interviewer_technology", 
     joinColumns = { 
     @JoinColumn(name = "interviewer_id", referencedColumnName = "id") 
}, 
inverseJoinColumns = { 
     @JoinColumn(name = "technology_id", referencedColumnName = "id") 
}) 
@ManyToMany(fetch = FetchType.LAZY) 
private Collection<Technology> technologies; 

과 :

은 지금까지 나는이 역 하나

@ManyToMany(mappedBy = "technologies", fetch = FetchType.LAZY) 
private Collection<Interviewer> interviewers; 

, 그러나 나는 역 하나를 삭제하려고하면, 나는 오류가를 얻을 수있다 필드를 참조하는 조인 테이블의 필드입니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

지정하지 않는'일 CascadeType' 않습니다

샘플 비즈니스 클래스의 방법을 삭제 하시겠습니까? –

+0

아니요, 소유하고있는 쪽의 CascadeType.MERGE는 제가 시도했지만 작동하지 않았습니다 ... – Lucas

+0

CascateType.ALL이 작동해야합니다. 또한 찾고있는 유형이 아닌 경우 CascadeType.delete가 작동합니다. – Zeus

답변

1

@ManyToMany 주석 cascade = CascadeType.ALL을 먼저 포함하십시오.

그런 다음 호출하는 클래스에 유효한 트랜잭션이 있는지 확인하고, 삭제되는 순간 대상 엔티티가 PersistenceContext에 첨부되는지 확인하십시오. 그렇지 않은 경우 엔티티에 대해 병합을 수행해야 할 수도 있습니다 결과 SQL을이 당신의 DB에 의해 실행되고 또한 경우 :

@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public void delete(T entity) throws ServiceException { 
    try { 

     if (!entityManager.contains(entity)) { 
      entity = entityManager.merge(entity); 
     }   
     entityManager.remove(entity);  

    } catch (Exception se) { 
     se.printStackTrace(); 
     throw new ServiceException("Error while deleting from DB " + 
       entity.getClass().getSimpleName() + " id: " + entity.getId()); 
    } 
} 
관련 문제