Spring/Spring Data JPA 27

[Spring Data JPA] 3-4. Specifications

1. Specification도메인 객체에 대한 조건을 정의public interface Specification { Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder);}  Predicate각 조건을 표현하는 객체 (where 절) CriteriaBuilder다양한 조건을 빌드할 수 있는 객체 Definitionpublic class CustomerSpecs { // 특정 날짜 이전에 생성된 고객을 찾는 Specification public static Specification isLongTermCustomer() { return (root, query, builder) -> { ..

[Spring Data JPA] 3-3. Custom Repository Implementations

1. CustomizingInterface: Custom Repository interface CustomizedUserRepository { void someCustomMethod(User user);} Implements: Custom Repository Interface (High Priority)postfix: Implclass CustomizedUserRepositoryImpl implements CustomizedUserRepository { @Override public void someCustomMethod(User user) { // 사용자 정의 구현 내용 }} Extends: CrudRepositoryinterface UserRepository extends CrudRepo..

[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)페이징 정보 전달 (번호, 정렬 ..