JPA 활용편 1

    도메인 개발 팁 간단 정리

    도메인 개발 팁 간단 정리

    "김영한 강사님의 JPA 활용편 1을 듣고 필요한 부분 간단하게 정리하기." JPA는 트랜잭션 안에서 이뤄지기 때문에 @Transactional을 선언해준다. 조회 시에는 @Transactional(readOnly = true)를 설정해주는 것이 조회 성능에 있어서 장점을 가진다. 따라서, 클래스 레벨에서 @Transaction(readOnly = true)로 설정해주고 C, U, D 부분에서 @Transactional을 사용해 메서드 레벨에서 관리한다. 메서드 레벨의 애노테이션이 클래스 레벨의 애노테이션보다 우선순위가 높다. @Transactional(readOnly = true) // 조회 성능에서 장점을 가진다. @Service public class Service { ... @Transaction..

    엔티티 설계의 주의사항 간단 정리

    엔티티 설계의 주의사항 간단 정리

    "김영한 강사님의 JPA 활용편 1을 듣고 필요한 부분 간단하게 정리하기" 엔티티에는 Setter를 사용하지 않는 것이 좋다. 모든 연관관계는 지연로딩으로 설정한다. 즉시로딩은 회원이랑 주문이 연관관계 있는 경우 회원을 조회하면 주문도 한번에 조회가 되는것을 말함 예측이 어렵고 어떤 SQL이 실행될지 모를 수 있다. 지연 로딩 (LAZY)로 설정하고 Fetch Join을 이용해 데이터를 가져온다. JPQL을 실행할 때 N(연관된 회원 조회 100번) + 1 (주문 쿼리 한번) 문제의 발생 XtoOne관계는 모드 EAGER가 default로 되어있다 → 반드시 LAZY 설정 컬렉션 필드는 초기화를 한다. List orders = new ArrayList(); NPE에 대해 안전해진다. 하이버네이트가 엔티티..