두 개의 엔티티, 트랜잭션 및 항목이 있습니다. 거래에는 자체 데이터와 차변 및 대변 금액으로 구성된 하나 이상의 항목 목록이 있습니다. 응용 프로그램의 한 부분에서 나는 이들 중 거의 모든 것을 제거해야하며이 경우 JPQL이 가장 쉽고 빠르다는 것을 알았습니다. 나는, EntityManager를 일부 트랜잭션에있는 모든 항목을 통과 할 필요는 동일한 트랜잭션에서 여전히 (실행 트랜잭션이 시간)JPA에서 데이터베이스 변경 사항을 인식하도록하십시오.
entityManager.createQuery(
"DELETE FROM Entry e WHERE e IN (:entries)").
setParameter("entries", new ArrayList<Entry>(
entriesToRemove)).executeUpdate();
entityManager.createQuery(
"DELETE FROM Transaction e WHERE e IN (:transactions)").
setParameter("transactions", new ArrayList<Transaction>(
transactions)).executeUpdate();
문제는 나중에 코드에서이다 :
이 코드를 실행 내가 최근에 제거한 거래를 여전히 제공합니다.
이 이벤트를 처리하는 방법이 있어야한다고 생각합니다. 여기 예제에서는 두 개의 JPQL 삭제 만 실행하지만 외부 서비스 나 외부의 다른 것을 호출하여 데이터베이스에 영향을 줄 수 있습니다. 어쨌든 EntityManager의 캐시가 여전히 유효하다는 것을 확인해야한다. 왜냐하면 삭제 된 객체를 여전히 포함하고 있기 때문이다.
나는 entityManager.flush()를 사용해 보았습니다. 이러한 삭제 후에는 성공하지 못합니다. 나는 executeUpdate()를 사용하기 때문에; 삭제가 바로 밑에있는 데이터베이스로 플러시되므로 정말 도움이되지 않을 것입니다.
모든 포인터, 힌트 및 답변을 이해하십시오. 모든 트랜잭션이 특정 계정에 속한다는 것을 알고있는 경우