본문 바로가기
IT/Java

isNew method

by 성준하이 2022. 12. 12.
반응형

JPA에서 save 를 할 경우 persistence 상태에 따라서 insert 가 되거나 update 가 되게한다.

save에 대한 내용은 아래 참고 포스팅 참고 바란다.

 

 

이 역할을 하는것이 isNew 메서드 이다.

 

JPA에 기본적으로 구현되어있는 save 메서드를 보게 되면

@Transactional
@Override
public <S extends T> S save(S entity) {
    Assert.notNull(entity, "Entity must not be null.");
   
    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

상태에 따라 persis를 하거나 merge를 하게 된다.

 

isNew() 메서드는 새로운 Entity를 판단하기 위해 ID값을 확인하는데 기본 전략은 아래와 같다.

  • ID의 타입이 객체 타입(reference)일 때: null
  • ID의 타입이 기본 타입(primitive)일 때: 0
  • Persistable 인터페이스를 구현한 경우: 구현체 내에서 override
public interface Persistable<ID> {

    @Nullable
    ID getId();

    boolean isNew();
}

 

Persistable 를 따로 상속 받지 않아도 Entity 에서 @GeneratedValue를 통해서 자동 생성 전략을 따르는데 상황에 따라 이를 수동으로 설정해야할 경우도 있다.

 

그럴 경우엔 Entity 객체에 Persistable를 상속 받아 주고 GetId 와 IsNew 메서드를 오버라이딩 하여 사용할수 있다.


참고 포스팅

https://thenicesj.tistory.com/413

 

JPA메서드 save 와 saveAndFlush 비교

이전 포스팅에서 jpa 에 대해서도 다뤄봤고 영속 방법중 하나인 더티체킹에 대해서도 다뤘다. 아래 참고 포스팅을 확인 바람. 이번 포스팅에서는 더티체킹이 아닌 merger 방법으로 데이터를 영속

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

SimpleDateFormat 에 대해  (7) 2022.12.16
이클립스 내에서 문자열 일괄 변경  (19) 2022.12.14
Entity 에서 date관련 annotation  (15) 2022.12.11
LinkedHashMap  (31) 2022.12.09
Flush에 대해  (31) 2022.12.08

댓글