강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jahyun
jahyun

câu hỏi đã được viết

Dữ liệu mùa xuân JPA

PersistenceContext 관련 질문드립니다.

Viết

·

323

0

안녕하세요 너무 좋은 강의 잘 듣고 있습니다.

두가지 질문이 있습니다.

 

  1. PersistenceContext의 상태비교 관련입니다.

JPA2 JpaRepository.save() 메소드 강의를 시청하며, 따라하던 도중

첫번쨰 assertThat 부터 False 로 떨어져 왜이런지 모르겠습니다.

제가 이해한것과 강의내용에 따르면 당연히 True 가 놔와야 할텐데 이상하네요.

테스트는 @SpringBootTest 를 사용한 별도의 테스트클래스를 만들어 진행중이며,

PostRepository의 경우 아래와 같이 선언 하였습니다.

어떤 부분을 잘못이해하고 있거나 틀렸을까요 ?

 

 

public interface PostRepository extends JpaRepository<Post,Long>, QuerydslPredicateExecutor<Post> 

 

 

@SpringBootTest
class DemoJpaApplicationTests {

@Autowired
private PostRepository postRepository;

@Autowired
private ApplicationContext applicationContext;

@PersistenceContext
private EntityManager entityManager;

 

 

@Test
void save(){
    Post post = new Post();
    post.setId(1L);
    post.setTitle("JPA");
    Post savePost = postRepository.save(post);

    assertThat(entityManager.contains(post)).isTrue();
    assertThat(entityManager.contains(savePost)).isTrue();
    assertThat(savePost == post);
}

 

  1. 업데이트 쿼리가 안나갈 경우 어떤걸 봐야할까요 ?

updateTitle을 만들어 사용할땐 정상적으로 변경 됐지만

아래와 같이 코드를 작성하여 테스트 해보니 title에 Spring이 그대로 남아있어 테스트가 실패하네요.

private Post savePost(){
    Post post = new Post();
    post.setTitle("Srping");
    return postRepository.save(post);
}

@Test
void updateTitle(){
    Post spring = savePost();
    spring.setTitle("hibernate");
    Optional<Post> post =  postRepository.findById(spring.getId());
    assertThat(post.get().getTitle()).isEqualTo("hibernate");
}
JPAjavaspring

Câu trả lời 1

0

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

답변이 늦어서 죄송합니다. 첫번째는 디버거를 사용해서, postRepository.save() 호출했을 때 EntityManager까지 가는지 확인해 봐야겠네요.

두번째는 post 객체에 setTitle()을 사용해서 객체를 변경했는데 왜 update 쿼리가 생기지 않느냐는 질문이신가요? 음.. 트랜잭션이 끝날 때 DB에 객체의 변경 사항을 동기화 시켜주기 때문인데요. 테스트 코드는 (트랜잭션으로 묶여있다는 가정하에) 지금 한 트랜잭션 내부에서 아직 트랜잭션이 끝나지 않은 상태에서 DB에서 (또는 1차 캐시에서) 다시 읽어오는 거니까 아직 변경 내역이 변영되지 않은 데이터가 읽어져서 그렇습니다.

Hình ảnh hồ sơ của jahyun
jahyun

câu hỏi đã được viết

Đặt câu hỏi