본문 바로가기

java/JPA2

변경 감지와 병합(merge) 준영속 엔티티? 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. (프로젝트 themeService.setThemeScore 에서 수정을 시도하는 theme 객체이다. theme 객체는 이미 DB에 한번 저장되어서 식별자(primary key)가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.) 프로젝트 적용 예시 1. 테마 평점은 기본으로 0.0값이 들어가고 사용자가 review를 작성할때 평점이 반영되는데 그때 이미 theme는 db에 저장되어있는 객체이고 그 객체를 불러와서 다시 themeScore의 값만 변경하게 된다. 준영속 엔티티를 수정하는 2가지 방법 - 변경 감지 기능 사용 영속성 컨텍스트에서 엔티티를 다시 조회한 후 데이터를 수정.. 2022. 12. 5.
엔티티 설계시 주의점 1. 엔티티에는 가급적 setter를 사용하지 말자 - Setter가 모두 열려있다. 변경포인트가 너무 많아서, 유지보수가 어렵다. 2. 모든 연관관계는 지연로딩으로 설정 - 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. //JPQL select o From order o; -> SQL select * from order n(100) + 1 (order) == N + 1문제 - 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다. - 연관된 엔티티를 함께 DB에서 조회해야하면, fetch join 또는 엔티티 그래프 기능을 사용한다. - OneToOne, ManyToOne 관계는 기본이 즉시로딩이므로 직.. 2022. 11. 29.