em.flush(),clear() 대신 @Modifying 어노테이션을 붙여도 되나요?
테스트 코드를 짜보았더니 @Modifying이 동작하지 않는다는 것을 확인했습니다. 그래서 QueryDSL 구현체 내부에서 em.flush(), em.clear()를 호출하는 방식으로 구현해보았는데요. 원하는 대로 동작하기는 하는데, EntityManager를 clear하는 코드를 매번 넣어주어야 되는건지 고민이됩니다. 수행한 테스트는 아래와 같습니다. for (Message m : insertBeforeMessages) { System.out.println("before test = " + m.getStatus()); } messageRepository.updateMessageStatus(bundle,MessageStatusType.DONE); // em.flush(); // em.clear(); List insertAfterMessages = messageRepository.findByBundle(bundle); for (Message m : insertAfterMessages) { System.out.println("after test = " + m.getStatus()); org.junit.jupiter.api.Assertions.assertEquals(m.getStatus(),MessageStatusType.DONE); }@Modifying void updateMessageStatus(Bundle bundle, MessageStatusType status);@Override @Transactional public void updateMessageStatus(Bundle bundle, MessageStatusType status) { QMessage message = new QMessage("m"); JPAQueryFactory queryFactory = new JPAQueryFactory(em); long execute = queryFactory.update(message).set(message.status, status).where(message.bundle.eq(bundle)).execute(); em.flush(); em.clear(); }