2016-06-12 36 views
0

他のドキュメントで参照されているドキュメントがあります。私はこの接続をエンティティに保存します。JPA - @ManyToManyからエンティティを削除する

ただし、削除しようとすると問題が発生します。

例:Doc2がDoc1を参照するとき、Doc2を削除できません。

私は他のDocumentsByBySetからDoc2を削除する必要があります。しかし、私は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

あなたは協会の逆側保存することができます:あなたは使用を避けるべき

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

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

または削除するには、ドキュメントを参照するすべてのドキュメントを検索するクエリを書くことができますが複数の基準に基づいて動的クエリを作成する必要がない場合は、criteria APIを使用します。 JPQLは、読みやすく、理解しやすくなります。

関連する問題