N쪽이 연관관계주인 (비즈니스적으로 주인은 중요한게 아님)'N' 의 Entity 클래스에서 '1'의 클래스 선언, @ManyToOne 사용후, @JoinColum (name = "1의 Entity 클래스의 Pk ColumName명")"1"의 Entity 클래스에서 L
N 대 M 관계일 경우 > 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 위의 예시처럼 표현할 수 없음 연결테이블(Member_Product) 을 추가해서 일대다, 다대일 관계로 풀어내야함 > (실무에서는 사용 X) @ManyToMany 사용 특별하게 @
Entity에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있다 == 변경 포인트가 너무많아서, "유지보수"가 힘들다 모든 연관관계는 "지연로딩"으로 설정 즉시로딩("EAGER")은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 실무에서 모
회원 서비스 개발 Service에서는 @Transactional 사용, 등록 부분에서는 @Transactional 조회 (읽기) @Transactional (readOnly = true)를 사용해 성능을 좋게한다.
주문 서비스 다른 클래스에서 무분별한 set 호출을 막기위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) == protected 기본 생성자를 만들어 무분별한 set 호출을 막는다. 번외 Entity는 최대한 순수하게
영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다수정을 시도하는 객체다, 객체는 이미 DB에 한번 저장되어서 식별자가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼수 있다.JPA가 자동으로 업데이트를 해주지 않는다. (n
📌 편의 라이브러리 원래는 파일을 수정한 후 서버를 재시작하여야만 변경된 사항이 적용이됐다. 하지만 해당 파일을 build.gradle의 dependencies에 추가후 서버를 재시작 할 필요없이 Recompile만 하는것만으로도 변경사항이 적용이된다. 번
📌 상속 관계 매핑 > 상속관계 (extends) 로 매핑할경우 부모 클래스에 로 전략을 지정해줘야된다. 3가지 종류가 있다. SINGLE_TABLE TABLEPERCLASS JOINED 상황에 맞게 사용한다. 📍 @Embeddable (내장 값 타입) 사용 >
Spring JPA [활용] 정리3
📌 비즈니스 로직 엔티티 데이터를 가지고있는 메서드 안에 비즈니스 로직을 구현하는게 가장 좋다. ex : 재고수량 증가, 재고수량 감소 등 중요 !! 생성 메서드 사용시 new 객체를 통해 접근하면 X, 메서드를 만들어 파라미터 값을 넘겨줘야된다. 참고 ✔ 도메
변경감지와 병합 (merge) 📌 준영속 엔티티 (DB에 한번 저장이 되어서 식별자가 존재하는것) : 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 준영속 엔티티를 수정하는 2가지 방법 1. 병합 (merge) 사용 2. 변경감지 (dirty chec
조회의 성능 최적화 📌 엔티티를 외부로 노출 방법 !! (사용 XX), (이런 방법이있다 정도) > - 예시 (Order 엔티티 클래스를 외부에 노출) 성능상 문제, LAZY (지연로딩)인 관계까지 쿼리를 날려서 확인하게된다. 그렇다고 !! LAZY (
X To Many 컬렉션 조회 엔티티를 직접 노출해서 컬렉션을 반환 (엔티티가 직접 노출됨으로 사용X)
X To Many 컬렉션 조회시 페치 조인 사용 > - 예시 ( X To Many 관계인 경우 Many 부분에도 fetch 조인을 해줘서, Many엔티티의 데이터를 조인해줘야된다) 📍 X To Many를 패치 조인을 하면 페이징 처리가 안된다. (페이징 처리 사용
To One 관계들을 먼저 조회하고, To Many관계는 각각 별도로 처리한다. To One 관계는 조인해도 데이터 row 수가 증가하지 않는다. To Many 관계는 조인하면 row 수가 증가한다. row 수가 증가하지 않는 (To One) 관계는 최적화 하
OSIV와 성능 최적화
실무에서는 조건에 따라서 실행되는 쿼리가 달라지는 동적 쿼리를 많이 사용한다. ( 예 : 검색 조건)
스프링 데이터 JPA는 JPA를 사용할때 지루하게 반복하는 코드를 자동화 해준다.사용예시 (인터페이스로 사용)public interface repository extends JpaRepository<T, Id(pk)>{}스프링 데이터 JPA는 JpaReposito