테스트 코드 Transactional, flush
449
작성한 질문수 5
안녕하세요!
jpa 수업듣고 혼자 공부하다가 궁금한 점이 생겨서 질문 남깁니다.
@Repository
@Transactional
@RequiredArgsConstructor
public class ItemRepositoryImpl implements itemRepository{
private final EntityManager em;
@Override
public void delete(Long itemId){
// Item item=findOne(itemId);
// em.remove(item);
em.createQuery("delete from Item i where i.id = :id")
.setParameter("id",itemId).executeUpdate();
}
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class ItemRepositoryTest {
@Autowired ItemRepository itemRepository;
@Autowired private EntityManager em;
private User user;
private Item item;
@Test
public void delete(){
Long itemId= itemRepository.save(item);
System.out.println(itemId);
itemRepository.delete(itemId);
// 1)
System.out.println(itemRepository.findOne(itemId).getId());
Assertions.assertEquals(null,itemRepository.findOne(itemId));
}
테스트코드를 이렇게 작성하는 경우에는 delete가 다시 rollback되고 테스트 코드에서 1) 부분에서 rollback이 되고 itemRepository.findOne(itemId)가 itemId로 나오던데 @Transactional가 잘못 적용된 것인가요?
jpql을 사용하는 경우 flush가 일어나서 flush 과정에서 commit이 일어나고 테스트 코드에서는 이 commit때문에 rollback이 일어나는 것 같은데 제가 생각한 것이 맞나요?
만약 제가 생각한 것이 맞다면 테스트 코드 부분에 1)에서 롤백이 일어나서 테스크코드 delete 메소드에서 save(item)부분도 롤백이 되서 itemRepository.delete(itemId)를 한 이후에는 find해도 null이 나와야하는데 그대로 itemId가 나오는 이유가 뭘까요?
주석처리한 것처럼 em.remove를 사용하면 테스트에 성공하는데 그 이유는 뭘까요ㅜㅜ
답변 0
readonly 트랜잭션에 update를 수행하는 분리된 트랜잭션 메서드를 호출 할 때 질문
0
187
2
ssd 에선 innodb_flush_neighbors을 0으로 하면 될까요?
1
227
1
em.flush 발생 시점에 대한 부가적인 질문
0
397
1
DB Connection 관련하여 질문드립니다.
0
301
1
클래스 @Transactional
0
400
1
@Transactional 안에서 외부 서비스 api call 관련 질문있습니다.
0
695
1
@PostConstruct 지정 함수 @Transactional 지정 시 컨텍스트 관리가 안되는 경우
0
689
1
Controller, Service, Repository 구조에서 Transaction 관련 질문
0
1115
1
서비스 계층에 트랜잭션 추가 하는 이유
0
401
1
em.flush() & em.clear() 제가 이해하고 있는게 맞나요?
0
430
1
em.flush, em.clear에 관한 질문입니다
1
663
1
통합 테스트 진행 도중 JdbcMemberRepository Transaction 관련 에러 문의
0
548
1
entityManager.flush() 호출을 하면 실제 데이터베이스에 반영이 되나요?
0
421
1
추상클래스와 @transactional 질문입니다.
0
888
1
Transactional에 관해서..
0
297
1
세션 2개 상황에서 동시성 문제
0
345
1
안녕하세요 영한님 @Transactional 및 open에 관하여 질문이 있습니다.
0
800
1
벌크 연산 수행후 flush( ) 사용 질문
1
275
1
영속성 컨텍스트 1차 캐시가 비워지는 시점은 언제인가요?
0
1421
1
flush, clear 질문
0
398
2





