전체 글 315

[Spring Data JPA] 3-2. JPA Query Methods (4)

8. Modifying Queries@Modifying명시적 쿼리 선언 메서드 중, 수정 or 삭제 연산일 때 붙여주는 애노테이션 update@Modifying@Query("update User u set u.firstname = ?1 where u.lastname = ?2")int setFixedFirstnameFor(String firstname, String lastname);(attribute) flushAutomatically: EntityManager flush (수정 쿼리 실행 전)(attribute) clearAutomatically: EntityManager clear (수정 쿼리 실행 후, 이전 데이터 삭제하기) delete @Modifying @Query("delete from U..

[Spring Data JPA] 3-2. JPA Query Methods (6)

11. Configuring Fetch- and LoadGraphsEntity Graph엔티티 조회 시, 연관 엔티티들을 fetch 하기 위한 구성특정 쿼리에서 어떤 연관 엔티티를 함께 로딩할 지 정의 종류Fetch Graph: 명시된 속성 Fetch. (나머지 속성: Lazy)Load Graph: 명시된 속성 Fetch. (나머지 속성: FetchType) Definition@NamedEntityGraph Entity Graph 정의 (entity)@Entity@NamedEntityGraph(name = "GroupInfo.detail", attributeNodes = @NamedAttributeNode("members"))public class GroupInfo { // 기본 페치 모드는 lazy ..

[Spring Data JPA] 3-2. JPA Query Methods (5)

8. Scrolling대규모 결과 집합을 작은 청크 단위로 처리할 수 있음 모든 결과를 메모리에 로드 X (효율적으로 처리) Window스크롤링 중 반환되는 청크현재 청크 데이터 + 위치 정보다음 Window를 가져옴 (결과 소진까지 반복)Window users = repository.findFirst10ByLastnameOrderByFirstname("Doe", ScrollPosition.offset());do { for (User u : users) { // 사용자 처리 } users = repository.findFirst10ByLastnameOrderByFirstname("Doe", users.positionAt(users.size() - 1));} while (!users.isEmpt..

[Spring Data JPA] 3-2. JPA Query Methods (2)

4. Using @Query도메인 클래스로부터 쿼리 로직 분리 (repository에 직접 선언)public interface UserRepository extends JpaRepository { @Query("SELECT u FROM User u WHERE u.lastname = :lastname") List findByLastname(@Param("lastname") String lastname);} @Paramquery method's named parameter (안전성)public interface UserRepository extends JpaRepository { @Query("select u from User u where u.firstname = :firstname or u...

[Spring Data JPA] 3-2. JPA Query Methods (1)

1. Query Lookup StrategiesDerived Query: 자동 생성 (메서드 이름 기반)Declared Query: 명시적 정의 2. Query CreationDerived Query메서드 이름 기반List findByFirstnameStartingWith(String prefix);List findByLastnameEndingWith(String suffix);List findByEmailContaining(String infix);List findByDescriptionNotContaining(String text); 이스케이프 설정like 쿼리 인수가 와일드카드 문자 포함 시 필요@EnableJpaRepositories(escapeCharacter = '\\') Declared Qu..

[Spring Data JPA] 3-1. Defining Query Methods (3)

7. Paging, Iterating Large Results, Sorting & Limiting대규모 데이터 세트를 효율적으로 조회 및 처리Page findByLastname(String lastname, Pageable pageable);Slice findByLastname(String lastname, Pageable pageable);List findByLastname(String lastname, Sort sort);List findByLastname(String lastname, Sort sort, Limit limit);List findByLastname(String lastname, Pageable pageable); PagingPageable (param)페이징 정보 전달 (번호, 정렬 ..

[자바 ORM 표준 JPA 프로그래밍] 10-4. 객체지향 쿼리 언어: QueryDSL (1)

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. QueryDSLJava에서 쿼리를 생성할 수 있게 해주는 프레임워크 (오픈소스) 특징타입 안전자바 코드 O (문자열 기반 X)컴파일 시점에 타입 체크 동적 쿼리 생성Fluenct API (Method Chaining)직관적인 쿼리 작성 방식 (Readable) 다양한 지원SQL, JPA, MongoDB, Lucense 2. 시작Q Classmetadata (entity field)entity-based(plugin) querydsl-apt  JPAQuery (or JPAQueryFactory)type-safe querydynamicallypublic class UserRepositoryCustomImpl implemen..

[Spring Data JPA] 3-1. Defining Query Methods (2)

4. Repository Methods Returning Collections or IterablesUsing Streamable as Query Method Return Typeinterface PersonRepository extends Repository { Streamable findByFirstnameContaining(String firstname); Streamable findByLastnameContaining(String lastname);}Streamable result = repository.findByFirstnameContaining("av") .and(repository.findByLastnameContaining("ea"));Streamable비병렬 스트림을 접근할 수 있..