jpa save 호출시 파라미터로 넘긴 Entity 는 영속화될까?

Minsu Kang·2022년 8월 4일
0

결론부터 말하면
persist 가 호출되는 경우 영속화되고,
merge 가 호출되는 경우 영속화되지 않는다.

언제 persist 가 호출되고 언제 merge 가 호출되는지? : https://insanelysimple.tistory.com/300

persist 동작

public void test() {
    AttributesMasterEntity entity = AttributesMasterEntity.builder()
            .attributeType(EpsAttributeType.ATTRIBUTES_PETS)
            .attributeIdByType("1234552134")
            .koName("hello")
            .build();

    AttributesMasterEntity newEntity = repository.save(entity);

    entity.setKoName("hi123");
    System.out.println(entity == newEntity);
}

위 코드를 실행시키면 insert 쿼리가 실행되고 update 쿼리가 추가로 실행된다.
즉, 파라미터로 넘긴 entity 가 영속화되어 jpa 에서 변경을 감지했다.

merge 동작

public void test() {
    AttributesMasterEntity entity = AttributesMasterEntity.builder()
            .attributesMasterId(33333L)
            .attributeType(EpsAttributeType.ATTRIBUTES_PETS)
            .attributeIdByType("123455213")
            .koName("hello")
            .build();

    AttributesMasterEntity newEntity = repository.save(entity);

    entity.setKoName("hi123");
    System.out.println(entity == newEntity);
}

select 이후 insert 쿼리만 실행되었다.
파라미터로 넘긴 entity 는 영속화 되지 않았다.

profile
백엔드 개발자

0개의 댓글