2016-06-12 3 views
0

다른 문서에서 참조하는 문서가 있습니다. 엔티티에이 연결을 저장합니다.JPA - @ManyToMany 셀에서 엔터티 삭제

하지만 삭제하려고 할 때 문제가 있습니다.

예 : Doc2가 Doc1을 참조하면 Doc2를 삭제할 수 없습니다.

그 때문에 DocB2는 다른 문서 참조 세트에서 제거해야합니다. Doc2에서이 문서들을 참조 할 수는 없습니다.

1) 참조를 얻기 위해 메소드를 작성하려고 시도했지만 완료하지 못했습니다.

public synchronized Document getReferencedDocuments(Integer Id) { 
    EntityManager em = getEntityManager(); 
    try { 
     CriteriaBuilder cb = em.getCriteriaBuilder(); 
     CriteriaQuery<Document> cq = cb.createQuery(Document.class); 
     Root<Document> e = cq.from(Document.class); 
     ???? 
     Query q = em.createQuery(cq); 
     return q.getResultList(); 
    } finally { 
     em.close(); 
    } 
} 

2) 참조 된 문서도 저장하려고 시도했지만 막 다른 작업이었습니다.

어떻게해야합니까?

답변

1

당신은 협회의 반대 측면 저장할 수 :

@ManyToMany(mappedBy = "referencedBy") 
private Set<Document> referencedDocuments = new HashSet<>(); 

을 또는 삭제할 문서를 참조하는 모든 문서 찾기 위해 쿼리를 작성할 수

select doc1 from Document doc1 
join doc1.referencedBy doc2 
where doc2.id = :doc2Id 

당신은을 사용하지 않아야을 여러 API를 기반으로 동적 쿼리를 작성할 필요가없는 경우 criteria API를 사용합니다. JPQL은 읽고 쓰고 이해하기가 훨씬 쉽습니다.