Transactional
안녕하세요!
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를 사용하면 테스트에 성공하는데 그 이유는 뭘까요ㅜㅜ
답변 1
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
6
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
20
1
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
65
2
inheritance startegy 선택시 고려사항
0
45
1
Entity 동등성 비교
0
51
1
실무 조언 관련 질문입니다.
0
74
1
H2데이터베이스 파일 생성
0
83
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
71
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
68
1
JPQL 메소드와 락
0
64
1
Delivery @OneToOne
0
77
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
107
2
UnsupportedOperationException 발생
0
112
3
H2 Database 연결이 안됩니다.
0
106
2
연관관계 매핑 질문드립니다.
0
104
2
h2데이터베이스 실행오류
0
123
2
persistence.xml
0
132
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
96
1
영속성 컨텍스트
0
82
1
JPA 프록시
0
112
1
Native Query와 MyBatis
0
88
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
108
1
임베디드 타입 예시 코드 관련 질문
0
134
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
106
3





