반응형
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
반응형
'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 |
댓글