inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

YJJY님의 게시글

YJJY YJJY

@jcdad30003210

수강평 작성수
-
평균평점
-

게시글 1

질문&답변

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(); }

좋아요수
0
댓글수
2
조회수
1895