728x90
insert 시키는 두가지 방법
1. @Rollback(false) 사용 (DB insert 후 rollback 처리안됨)
2. EntityManager의 flush 처리 (DB insert 후 rollback 처리됨)
1. @Rollback(false) 사용 (DB insert 후 rollback 처리안됨)
@SpringBootTest
@Transactional
class JpashowApplicationTests {
@Autowired
MemberRepository memberRepository;
@Autowired
MemberService memberService;
@Autowired EntityManager em;
@Test
@Rollback(false)
public void 회원가입() {
// given
Member member = new Member();
member.setName("kim");
Address address = new Address();
address.setCity("test22");
address.setStreet("street22");
address.setZipcode("test zipcode");
member.setAddress(address);
// when
// 영속성 콘텍스트에 들어감.
Long saveId = memberService.join(member);
// then
Member findMember = memberRepository.findOne(saveId);
assertEquals(member, findMember);
}
@Rollback(false) 하는 경우
DB까지 주입된다.
2. EntityManager의 flush 처리 (DB insert 후 rollback 처리됨)
repository에서 entityManager에게 얘기해준다.
"이거 관리해줘! DB에 들어갈 수도 있으니까"
이후 EnityManager는
DB에 넣어달라고 하지 않으면 넣지 않는다. (em.flush())
그래서
영속성 컨텍스트 flush 해주는 순간
insert 쿼리문이 나간다.
@Test
public void 회원가입() {
// given
Member member = new Member();
member.setName("kim");
Address address = new Address();
address.setCity("test22");
address.setStreet("street22");
address.setZipcode("test zipcode");
member.setAddress(address);
// when
// 영속성 콘텍스트에 들어감.
Long saveId = memberService.join(member);
// then
// >>>> insert를 위한 flush 처리
em.flush();
Member findMember = memberRepository.findOne(saveId);
assertEquals(member, findMember);
}
'서버' 카테고리의 다른 글
Springboot3 - Exception 생성하기 (0) | 2024.12.30 |
---|---|
Springboot3 - 테스트환경 메모리 모드로 설정 (0) | 2024.12.30 |
Springboot - vscode에서 hot swapping 셋팅 (1) | 2024.12.26 |
github action - npm command not found 뜨는 현상 (0) | 2024.12.26 |
SpringBoot - @Transactional 사용 (+어떤 패키지 사용해야할까) (0) | 2024.12.26 |