-
save() 메서드 호출 시, select 쿼리가 하나 더 나가요 ㅠㅠ...Back End/Spring Data JPA 2022. 2. 17. 12:25
# 발생 기원
1. 엔티티의 PK 를 직접할당하고 save() 호출 시 목격 됨
# 이유
em.persist() 가 아닌 em.merge()가 호출되기 때문
save() 메서드의 내부 코드를 보면 entityInformation.isNew(이하 isNew) 로 persist와 merge로 분기함.
엔티티의 PK가 null 이거나 초기화 값인 경우(원시타입, ex[ 0, 0L] ) isNew는 True, 그 외의 경우는 False 로 처리된다.
# save() 메서드 내부코드
# 해결방법
Persistable 인터페이스를 오버라이딩 한다.
# 예시코드
@Entity public class User implements Persistable<Long>{ @Id long id; @Override public Long getId() { // TODO Auto-generated method stub return this.id; } @Transient boolean isNew=true; @Override public boolean isNew() { // TODO Auto-generated method stub return this.isNew; } @PostPersist @PostLoad public void modifyIsNew(){ this.isNew=false; } }
728x90'Back End > Spring Data JPA' 카테고리의 다른 글
[Spring JPA] 중간테이블 (조인테이블) 이 있을 때 연관관계 매핑 (0) 2022.08.28 [Spring JPA] @MappedSuperClass 사용시 주의할 점 (0) 2022.03.04 [Spring JPA] JPA, JPQL 의 조인 시 주의할 점 (Outer, Inner, Fetch) (0) 2022.01.29 [Spring JPA] How to retrieve Only SuperClass from a class hierarchy. (0) 2022.01.28 [Spring JPA] Interface-Based Projection doesn't work. (0) 2022.01.28