JPA13 Data JPA 쿼리메소드 쿼리 메소드 기능 3가지 메소드이름으로 쿼리생성 메소드이름으로 JPA NamedQuery 호출 @Query 어노테이션을 활용하여 리파지토리 인터페이스에 쿼리 직접 정의 예제 public List findByName(String name){ return em.createQuery("select m from Member m where m.name=:name", Member.class) .setParameter("name",name).getResultList(); } 해당 소스는 순수JPA 리포지토리를 이용한 JPQL임 . 쿼리 메소드는 Repository 인터페이스에 간단한 네이밍 룰을 이용하여 메소드를 작성하면 원하는 쿼리를 실행할 수 있음. Data JPA의 메소드이름 쿼리생성방식으로 변경하면 쉽게 소스.. 2023. 10. 10. 변경감지 이번 글에서는 JPA의 변경감지 또는 더티체킹이라 불리는 개념에 대해 간략히 정리한다. JPA 변경감지 JPQL에는 업데이트 문법이 존재하지 않는다. 그렇다면 JPA에서는 업데이트를 어떻게 구현해야할까? JPA에서는 영속화된 Entity의 필드 값을 변경만 하기만 하면 자동으로 데이터베이스에 업데이트 되도록 반영이된다. 이것이 Dirty Checking이다. 더티체킹의 동작원리 영속성 컨텍스트가 엔티티가 영속화 되었을때 최초의 상태를 저장(스냅샷). 영속성 컨텍스트가 flush되는시점에 엔티티와 스냅샷 엔티티를 비교해 달라진 엔티티를 찾음. 이후 변경된 필드들을 이용하여 쓰기지연 SQL 저장소에 Update 쿼리를 생성하여 쌓음. 모든 작업이 끝나고 트랜잭션을 커밋을 하면 이때 쓰기지연SQL 저장소에 있.. 2023. 10. 6. Join vs Fetch Join 차이점 일반 조인 Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가 검색조건에는 필요한 경우에 주로 사용됨 Fetch 조인 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 Fetch Join이 걸린 Entity 모두 영속화하기 때문에 FetchType이 Lazy인 Entity를 참조하더라도 이미 영속성 컨텍스트에 들어있기 때문에 따로 쿼리가 실행되지 않은 채로 N+1문제가 해결됨 이제 조인 예시를.. 2023. 10. 4. 즉시로딩 과 지연로딩 그리고 N+1 Member와 Order 엔티티의 연관관계는 1:N이다 여기서 Member엔티티에서 Orders를 조회할때 즉시로딩으로 설정해보았다. @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List orders = new ArrayList(); ~ToMany의 연관관계는 기본적으로 지연로딩이라 즉시로딩(EAGER)를 수동으로 설정하고 조회한다. public List testMember(Long userId){ return em.createQuery("select m from Member m",Member.class).getResultList(); } 분명 Member엔티티만 조회했는데 그와 연관된 order엔티티가 조회되었다. 즉시로딩으로 설정.. 2023. 9. 20. 이전 1 2 3 4 다음