본문 바로가기

CS 잡지식

JPA에서 같은 [식별자]로 Context에서 조회를 하면....

@Test
public void testMember(){

    //givien
    Member member = new Member("memberA");

    //when
    Member savedMember = repository.save(member); //save 저장(id도 [자동] 생성/저장)
    Member findedMember = repository.find(savedMember.getId());(saveMember id로 조회)

    //then
    //JPA에서는 같은 ID로 Context로 조회한 객체들은 [무조건] 같은 객체, 즉 참조변수 값이 같음을 보장한다.
    assertThat(findedMember).isEqualTo(savedMember);

}

findedMember 객체는 [saveMember의] id로 조회를 하였다. 

JPA에서는 Context 내에서 [같은] 식별자로 조회한 객체는 반드시 같은 객체임을 보장한다.

-> 쉽게 말해서, id를 key값으로 하여 value인 객체를 Context에 저장하고 있다는 뜻이다. 

 

그러나, 다른 Transaction이면, 같은 객체가 아니다. 

이는 JPA가 1개의 Transaction 내에서 어떻게 동작하는 지를 세부적으로 알아야 하므로, JPA를 공부하길 바란다. 

간략히 설명을 하면, JPA는 Transaction이 끝나면(commit()을 만나면), Context 내의 SQL 쿼리 저장소의 모든 SQL문

을 DB에 날리고, 또한 Context 내에 저장된 객체 또한 전부 비워 버린다. 

-> 고로, Transaction이 서로 다르면, 같은 식별자로 조회를 하여도 다른 객체가 나온다.