JPA를 사용하다 보면 LAZY로딩에 의해서 더 많은 쿼리가 나가는 경우가 발생한다. 쿼리를 보낼 때 연관된 내용을 바로 찾지 않고 필요할때 다시 쿼리를 보내서 찾는 LAZY 방식을 사용하여 N+1 쿼리 문제가 발생하게 된다. ToOne에 관계는 fetch join을 사용하여 한번에 값들을 모두 조회할 수 있지만 ToMany 같은 컬렉션 조회는 한개는 상관없지만 여러개를 fetch join을 걸게되면 MultipleBagFetchException 에러가 나게된다. properties설정에 하이버네이트의 default_batch_fetch_size 글로벌 옵션을 걸거나 필요한 엔티티에 어노테이션 @BatchSize를 붙이면 된다. 이 옵션은 설정한 size만큼 in절로 묶어서 한번에 가져오기 때문에 쿼리를..
자바 ORM 표준 JPA 프로그래밍 - 기본편 김영한님 강의듣고 정리하기 1. 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (int, double, Integer, Long 등) 임베디드 타입 컬렉션 값 타입 임베디드 타입 새로운 값 타입을 직접 정의할 수 있다. 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 한다. @..
자바 ORM 표준 JPA 프로그래밍 - 기본편 김영한님 강의듣고 정리하기 1. 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 : 외래키 하나로 양쪽 조인 가능, 사실 방향이라는 개념이 없음 객체 : 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 연관관계의 주인 연관관계의 주인 : 외래키를 관리하는 참조 주인의 반대편 : 외래키에 영향을 주지않음, 단순조회만 가능 다대일 [N:1] 다대일 단방향 - 가장 많이 사용하는 연관관계 다대일 양방향 - 외래키가 있는 쪽이 연관관계의 주인, 양쪽을 서로 참조하도록 개발 일대다 [1:N] 일대다 단방향 ..
자바 ORM 표준 JPA 프로그래밍 - 기본편 김영한님 강의듣고 정리하기 1. JPA 시작하기 스프링과 스프링 데이터 JPA를 쓰지않고 JPA 사용해보기 public class JpaMain { public static void main(String[] args) { // 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체의 공유 EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 엔티티 매니저는 쓰레드간에 공유X (사용하고 버려야한다.) EntityManager em = emf.createEntityManager(); // JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다. EntityTransaction..