inflearn logo
강의

講義

知識共有

Spring Data JPA

PersistenceContext 관련 질문드립니다.

335

jahyun

投稿した質問数 1

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

JPA java spring

回答 1

0

whiteship

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

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

spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴

0

533

1

<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문

0

392

1

comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?

0

407

1

@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?

0

450

0

지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다

0

338

1

transaction 구간이 길어질 경우의 처리방법 문의드립니다.

0

905

1

docker postgres

0

293

1

Multiple DataSource 사용 시 transaction 관련 질문 드립니다.

0

2908

1

entity 중 null이 아닌 필드만 update 할 방법이 있을까요?

0

1190

1

Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?

0

385

1

엔티티를 상속받는 DTO가 일반적인가요?

1

1847

1

커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.

0

339

1

연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.

0

566

4

EntityManager 주입시 Annotation관련 질문드립니다.

0

565

1

클래스 기반 프로젝션 사용 관련 질문

0

560

1

save 메서드 질문드립니다.

0

258

1

복잡한 통계쿼리도 JPA로 가능한가요?

2

5592

1

find 와 get의 차이가 무엇인가요?

0

890

1

실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?

0

998

1

\dt Did not find any relations.

0

481

1

소스코드는 어디서 볼 수 있을까요?

1

287

1

table 생성과 select 문에 대한 질문

0

174

1

스프링 데이터 RepositoryTest 관련 질문

0

2173

2

NoRepositoryBean 과 추상클래스

0

446

1