Slice<Member> findSliceBy(Pageable pageable);
…
PageRequest pageRequest = PageRequest.of(1, 2, Sort.by(Sort.Direction.ASC, "age"));
Slice<Member> page = memberRepository.findSliceBy(pageRequest);
Page<Member> findPageBy(Pageable pageable);
…
PageRequest pageRequest = PageRequest.of(1, 2, Sort.by(Sort.Direction.ASC, "age"));
Page<Member> page = memberRepository.findPageBy(pageRequest);
결과 값의 개수 > N
→ 다음 페이지 존재함을 의미결과 값의 개수 > N
인 경우 추가적으로 가져온 +1의 데이터를 빼고 결과 리스트를 반환한다.public Slice<NotificationDto> findNotificationByUsername(String username, Pageable pageable) {
List<OrderSpecifier> ORDERS = getAllOrderSpecifiers(pageable);
List<NotificationDto> results = query
.select(new QNotificationDto(
notification.title,
notification.message,
notification.checked,
notification.notificationType,
notification.uuid,
notification.TeamId
))
.from(notification)
.where(notification.member.username.eq(username))
.orderBy(ORDERS.stream().toArray(OrderSpecifier[]::new))
.offset(pageable.getOffset())
.limit(pageable.getPageSize() + 1)
.fetch();
return RepositorySliceHelper.toSlice(results, pageable);
}
...
public class RepositorySliceHelper {
public static <T> Slice<T> toSlice(List<T> contents, Pageable pageable) {
boolean hasNext = isContentSizeGreaterThanPageSize(contents, pageable);
return new SliceImpl<>(hasNext ? subListLastContent(contents, pageable) : contents, pageable, hasNext);
}
// 다음 페이지 있는지 확인
private static <T> boolean isContentSizeGreaterThanPageSize(List<T> content, Pageable pageable) {
return pageable.isPaged() && content.size() > pageable.getPageSize();
}
// 데이터 1개 빼고 반환
private static <T> List<T> subListLastContent(List<T> content, Pageable pageable) {
return content.subList(0, pageable.getPageSize());
}
}
Spring Data JPA의 Page와 Slice
[SpringBoot] Spring Data JPA 에서 Page와 Slice
Querydsl - 빠른 시작, 간단 정리
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@GeneratedValue(strategy = GenerationType.TABLE)
@GeneratedValue(strategy = GenerationType.AUTO)
해결 방법
use-new-id-generator-mappings
을 false로 설정한다@GeneratedValue
의 전략을 GenerationType.IDENTITY
로 지정한다Spring Boot Data JPA 2.0 에서 id Auto_increment 문제 해결
EntityManager.flush()
를 통한 직접 호출영속성 컨텍스트에 대해 질문드립니다. - 인프런 | 질문 & 답변
JPA - 영속성 컨텍스트와 JPQL
QueryDsl 1차 캐시관련 - 인프런 | 질문 & 답변
[Spring JPA] 성능 개선을 하기 위해 당신이 알아야 할 상식
DTO로 조회해도 영속성 컨텍스트에서 관리가 되나요? - 인프런 | 질문 & 답변
일단 참고만 해두자..
[JPA] 엔티티 일부 데이터만 조회하는 Projection
SPRING,JPA 원하는 값 내려주기 방법 모음 총 정리, Projection 방법 모음