
org.springframework.data.jpa.repository.support.SimpleRepository
@Repository 적용@Transactional트랜잭션 적용SimpleJpaRepository에 구현된 메소드들이 이미 트랜잭션 안에서 처리되도록 구성됐기 때문에 사용 시 트랜잭션 없이 데이터 등록, 변경 가능@Transactional(readOnly = true)flush()를 생략save() 메서드persist()merge()null인지 여부로 판단0인지 여부로 판단save()실행 순서save()호출 시 isNew()메소드를 이용해 엔티티의 ID가 null 또는 0인지 확인persist(), nomerge()만약 ID값을 직접 넣은 후 save()호출한다면?

ID가 null 또는 0이 아니기 때문에 merge() 호출
select쿼리 이후 없다고 판단한 뒤 insert쿼리
매우 비효율적
Persistable인터페이스를 구현해 isNew()메소드를 재정의
등록 시간(@CreatedDate)을 이용하면 새로운 엔티티 여부를 쉽게 확인 가능
@CreatedDate에 값이 없으면 새로운 엔티티Persistable 구현 예시
@Entity
@EntityListeners(AuditingEntityListener.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Item implements Persistable<Long> {
@Id
private Long id;
@CreatedDate
private LocalDateTime createdDate;
public Item(Long id) {
this.id = id;
}
@Override
public Long getId() {
return id;
}
@Override
public boolean isNew() {
return createdDate == null;
}
}
"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."