테스트 케이스의 시작 부분에 테스트 데이터를 설정 한 JUnit 테스트가 있고 이후에 테스트 케이스의 조건을 테스트합니다 같은 테스트 방법으로. 테스트 사례의 조건을 테스트하는 쿼리는 네이티브 쿼리입니다. 나는 삽입/업데이트가 동일한 트랜잭션에 있기 때문에 DB에 즉시 쓰여 지도록 EntityManager.flush()를 명시 적으로 호출해야한다는 것을 알고 있습니다. 또한 entityManager.flush()를 JPA 쿼리로 대체 할 수 있다는 것을 알았습니다. JPA 쿼리는 동일한 결과를 얻은 것으로 보입니다. JPA는 SELECT 쿼리가 발행 될 때와 같이 즉시 JPA를 실행할 필요가있을 때까지 동일한 트랜잭션에서 DB 작업을 캐시 할 것이라고 들었습니다. 그래서이 모든 것이 합리적입니다. 내 질문은, 왜이 동작은 또한 네이티브 쿼리에 적용되지 않습니다 무엇입니까? 여기 내 기본 쿼리는 testSetup()에서 삽입/업데이트의 즉각적인 실행을 트리거하지 않으므로 내 어설 션이 실패하게됩니다.JPA : 기본 쿼리가 동일한 트랜잭션에서 캐시 된 삽입/업데이트의 실행을 트리거하지 않음
@Test
@Transactional
public void testCase() {
testSetup();
entityManager.flush(); // can be replaced with entityManager.createQuery("from Person");
List resultList = entityManager.createNativeQuery("select * from Person").getResultList();
Assert.assertTrue(resultList.size() == 1);
}