개요JPA 에서 쿼리를 최적화하는 방법 중 하나는 읽기 전용 쿼리를 사용하는 것이다.데이터를 변경하지 않는 조회 작업에서 성능의 향상이 가능하다.방법서비스 트랜잭션 안에서 전역적으로 설정@Transactional(readOnly = true)메서드, 클래스 레벨안에서 모든 DB 작업이 읽기 전용으로 변경됨.JPA 하이버네이트 프로바이더가 내부적으로 DB 에 대한 변경 사항을 추적하지 않도록 성능 최적화 수행쿼리자체에서 설정.setHint(QueryHints.READ_ONLY, true)List orders = qf.selectFrom(orderEntity) .where(...) .setHint(QueryHints.READ_ONLY, true) .fetch();해당 쿼리가 데이터를 변경하지 않고 오직 읽기..
CascadeType엔티티의 생명주기 이벤트를 관련 엔티티에 전파하는 방법을 정의종류ALL모든 캐스케이드 연산을 적용한다.즉, PERSIST, MERGE, REMOVE, REFRESH, DETACH가 모두 적용됩니다.PERSIST부모 엔티티를 저장할 때 연관된 자식 엔티티도 함께 저장합니다.예시장바구니 - 장바구니 상품(리스트)MERGE부모 엔티티의 상태를 병합할 때 연관된 자식 엔티티의 상태도 함께 병합합니다.REMOVE부모 엔티티를 삭제할 때 연관된 자식 엔티티도 함께 삭제합니다.REFRESH부모 엔티티의 상태를 새로 고칠 때 연관된 자식 엔티티의 상태도 함께 새로 고칩니다.DB와 동기화를 위하여 사용한다고 합니다.DETACH엔티티 매니저로부터 부모 엔티티를 분리할 때 연관된 자식 엔티티도 함께 분리..
개요Java Persistence API ( JPA ) 의 일부이다.컨테이너 관리형 영속성 컨텍스트에 대한 EntityManager 주입의 역할을 수행한다.영속성 컨텍스트의 역할엔티티 인스턴스의 생명주기를 관리한다.DB와 상호작용을 담당한다.사용은 언제하나?DAO(서비스 레이어) 혹은 Repository 계층에서 사용한다.해당 어노테이션 역할JPA 영속성 컨텍스트에 접근하기 위해 사용되는 EntityManager를 주입받기 위해 사용된다.Spring Framework 에서 해당 어노테이션을 통해 컨테이너가 관리하는 EntityManager 를 Service 레이어 혹은 레포 레이어에 제공이점 자원의 관리DB 연결을 효율적으로 ㄱㄴ트랜잭션의 관리트랜잭션 범위에서 영속성 컨텍스트를 제공한다.Thread Sa..
정의JPA 에서 mappedBy 속성은 양방향 관계에서 소유하지 않는 쪽에서 사용된다.용도단순 연관관계의 주인을 지정하는 용도로 사용함적용되는 어노테이션@OneToMany@OneToOne@ManyToMany일반적으로 Many 쪽이 연관관계의 주인이라는 점을 기억하면 된다.예시Post 게시물 - Comment 댓글하나의 게시물은 여러 댓글을 가질 수 있음댓글은 하나의 게시물에 종속됨.Post → @OneToManyComment → @ManyToOne연관관계의 주인이므로 @JoinColumn 과 Uploaded by N2T
JPA 에서 락 사용 권장 전략격리 레벨의 READ_COMMITTED 설정트랜잭션이 커밋된 데이터만 읽을 수 있음낙관적 버전 관리데이터의 버전을 추적해 동시 수정을 방지하는 전략버전 충돌이 발생하면 예외가 발생한다.개인적 락에 대한 생각개인적으로는 비관적락을 지금은 선호한다.대부분 개발한 사이트를 보면 사용자가 그렇게 많이 않을 뿐더러비관적락을 사용해도 성능에 문제가 없었기 때문이다.근데 만약 동시 사용자가 많은 경우에는 위 전략처럼 사용해야 할 것 같다.JPA 에서의 락 적용 위치EntityManager 사용: EntityManager.lock(), EntityManager.find(), EntityManager.refresh() 메소드를 통해 락을 적용할 수 있습니다.Query 사용: Query.se..