JPA(3)
-
[JPA] N+1 문제? 이렇게 많은 쿼리문이 수행될 줄 몰랐지
N+1 문제에 대해 알지 못했을 때, 한 번의 작업으로 필요 이상의 쿼리문을 작성하는 문제에 대해 인지하지 못하고 있었다. JPA를 다루며 수많은 문제에 직면했고, 조금씩 에러를 해결해 나가면서 N+1 문제를 알게 되자 이번에 처음으로 콘솔 창이 보여준 수많은 쿼리문을 보게 됐다. List p=new ArrayList(); p=this.planService.allUserPlan();@Override public List allUserPlan() { return this.planRepo.findAll(); } DB에 저장된 모든 계획을 가져오기 위해 findAll() 을 이용했다. 그러자.Hibernate: select planvo0_.plan_no as plan_no1_10_, plan..
2024.06.21 -
[JPA] FetchType.EAGER의 남용과 순환 참조 그리고 N+1
# N+1 문제에 대한 해결방안을 다룬 글이 아닙니다. FetchType.EAGER를 남용했다. @OneToMany @ManyToOne 관계를 지정할 때도, 하나의 엔티티 클래스 안에서 EAGER 속성을 여러 번 사용하는 등. 서버 실행 자체가 되지 않는 문제가 발생했다. 단순히 문제를 해결하기 위해 방법을 찾아나섰고 public class MemberVO { @Id private String member_id; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name="chat_no") private ChatVO chatVO; @OneToMany(mappedBy = "memberVO",cascade=Casc..
2024.06.20 -
[JPA] ddl-auto=create 테이블 drop 에러가 난다면
spring.jpa.hibernate.ddl-auto=create create는 테이블을 새로 생성해주고, update는 기존 테이블의 변경 사항을 수정해준다고 단순히 생각했다. 처음에 엔티티를 등록할 때 테이블 생성을 위해 create를 사용한 후 쭉 update 설정을 이용했다. 그러다가 테이블의 변경 사항을 적용하는 과정에서 create 설정을 사용, 에러를 마주하게 됐다. ddl-auto=create 는 기존에 있는 테이블을 삭제하는 작업을 거친 후 새로 생성한다. ddl-auto=create-drop 은 create와 동일하지만 애플리케이션이 종료될 때 테이블을 삭제한다.ddl-auto=update 는 모든 변경사항이 아닌, 새로운 테이블과 컬럼의 변경사항만 반영한다. 기존 컬럼의 타입 변환 ..
2024.06.19