spring data jpa @pageable 및 페이지 가능
JPA를 Spring Data 를 사용하면@Query없는 쿼리를 정의하다 Pageable★★★★
public interface UrnMappingRepository extends JpaRepository<UrnMapping, Long> {
@Query(value = "select * from internal_uddi where urn like %?1% or contact like %?1%",
nativeQuery = true)
List<UrnMapping> fullTextSearch(String text);
}
, 두 Pageable , . . . . . . . .@Query동작하지 않고 Spring은 메서드의 이름을 해석한 후 예외를 슬로우합니다. No property full found★★★★★★★★★★★★★★★★★?
public interface UrnMappingRepository extends JpaRepository<UrnMapping, Long> {
@Query(value = "select * from internal_uddi where urn like %?1% or contact like %?1%",
nativeQuery = true)
Page<UrnMapping> fullTextSearch(String text, Pageable pageable);
}
네이티브 쿼리에 페이지 매김을 사용할 수 있습니다.이 매뉴얼은 스프링 데이터 JPA - 레퍼런스 매뉴얼에 기재되어 있습니다.
"단, 카운트 쿼리를 직접 지정함으로써 페이지 번호 부여에 네이티브 쿼리를 사용할 수 있습니다(예 59). 쿼리 메서드에서 @Query를 사용하여 페이지 번호 매기기 네이티브 카운트 쿼리를 선언합니다.
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
Spring 포럼에서도 비슷한 질문이 제기되었는데, 페이지 매김을 적용하려면 두 번째 서브쿼리를 도출해야 한다는 지적이 있었다.하위 쿼리는 동일한 필드를 참조하므로 쿼리에서 참조하는 엔티티/테이블에 대한 별칭을 사용해야 합니다.즉, 다음과 같이 기재되어 있습니다.
select * from internal_uddi where urn like
대신 다음 사항이 필요합니다.
select * from internal_uddi iu where iu.urn like ...
「 」가 「 」라고 하는 하면,UrnMapping.internal_uddi츠키다
@Repository
public interface UrnMappingRepository extends JpaRepository<UrnMapping, Long> {
@Query(value = "select iu from UrnMapping iu where iu.urn like %:text% or iu.contact like %:text%")
Page<UrnMapping> fullTextSearch(@Param("text") String text, Pageable pageable);
}
동적 요청이 있는 경우 네이티브 쿼리를 해제해야 할 수 있습니다.
@Query를 사용하면 JPA 메서드의 마지막에 Pageable 클래스의 오브젝트를 전달해야 하는 경우에도 페이지네이션 기능을 사용할 수 있습니다.
예를 들어 다음과 같습니다.
Pageable pageableRequest = new PageRequest(page, size, Sort.Direction.DESC, rollNo);
여기서 페이지 = 페이지 색인(인덱스는 0부터 시작)
= number = "number of records" (레코드 수
=에 합니다.Direction = [No]
= User classrollNo = roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll roll 。
UserRepository repo
repo.findByFirstname("John", pageableRequest);
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USER WHERE FIRSTNAME = :firstname)
Page<User> findByLastname(@Param("firstname") String firstname, Pageable pageable);
}
Spring Data JPA 버전 2.0.4 이후를 사용하는 경우 Spring Data JPA @Query를 참조하십시오.샘플은 다음과 같습니다.
@Query(value = "SELECT u FROM User u ORDER BY id")
Page<User> findAllUsersWithPagination(Pageable pageable);
쿼리 메서드에서 @Query를 사용하여 페이지 번호 매기기 네이티브 카운트 쿼리를 선언합니다.
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}
도움이 되었으면 좋겠다
쿼리를 다음과 같이 다시 작성합니다.
select iu from internal_uddi iu where iu.urn....
설명 : http://forum.spring.io/forum/spring-projects/data/126415-is-it-possible-to-use-query-and-pageable?p=611398#post611398
jpa 버전에 따라 동작하는 방법이 다르다는 것을 알았습니다.디버깅의 경우 생성된 sql을 표시하기 위해 이 구성을 추가하는 것이 좋습니다.이것에 의해, 시간이 큰폭으로 절약됩니다.
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
스프링 부트 2.1.6의 경우.릴리스, 잘 작동한다!
Sort sort = new Sort(Sort.Direction.DESC, "column_name");
int pageNumber = 3, pageSize = 5;
Pageable pageable = PageRequest.of(pageNumber - 1, pageSize, sort);
@Query(value = "select * from integrity_score_view " +
"where (?1 is null or data_hour >= ?1 ) " +
"and (?2 is null or data_hour <= ?2 ) " +
"and (?3 is null or ?3 = '' or park_no = ?3 ) " +
"group by park_name, data_hour ",
countQuery = "select count(*) from integrity_score_view " +
"where (?1 is null or data_hour >= ?1 ) " +
"and (?2 is null or data_hour <= ?2 ) " +
"and (?3 is null or ?3 = '' or park_no = ?3 ) " +
"group by park_name, data_hour",
nativeQuery = true
)
Page<IntegrityScoreView> queryParkView(Date from, Date to, String parkNo, Pageable pageable);
you는 쓰지 .order by ★★★★★★★★★★★★★★★★★」limit sql "sql" 을 생성합니다
저도 같은 문제가 있었습니다.Pageable방법은 정상적으로 동작합니다.
메서드 매개 변수로 추가된 경우 - 작동하지 않습니다.
DB 콘솔과 네이티브 쿼리 지원을 사용한 후 이 방법이 정상적으로 작동한다는 결정을 내렸습니다.단, 대문자만 가능합니다.
내 지원서의 논리는 이것뿐이었다.names엔티티의 선두는 대문자입니다.
조금 가지고 놀다.그리고 그 사실을 알아보세요IgnoreCase메서드 이름으로 "실행"을 수행합니다.다음은 현용 솔루션입니다.
public interface EmployeeRepository
extends PagingAndSortingRepository<Employee, Integer> {
Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}
여기서 엔티티는 다음과 같습니다.
@Data
@Entity
@Table(name = "tblEmployees")
public class Employee {
@Id
@Column(name = "empID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotEmpty
@Size(min = 2, max = 20)
@Column(name = "empName", length = 25)
private String name;
@Column(name = "empActive")
private Boolean active;
@ManyToOne
@JoinColumn(name = "emp_dpID")
private Department department;
}
위의 모든 솔루션을 시도했지만 작동하지 않았습니다.마지막으로 페이지 표시에서 정렬을 삭제했더니 동작했습니다.
다음 튜토리얼이 도움이 되었습니다.-> https://www.baeldung.com/spring-data-jpa-query
현시점에서는 4.3.스프링 데이터 JPA 2.0.4 이전 버전
매우 중요한 추가 사항\ n-- #pageable \ n이것이 없었다면 나는 틀렸다.
또한 페이지 번호 설정은 주문하지 않아야 합니다.
PageRequest paginaConf = new PageRequest ((param1 - 1)
, param2);
마지막으로 페이지 <오브젝트 []>를 변환합니다.
Page <Object []> list = myQueryofRepo ();
List <XXXModel> lstReturn = myConversor (list.getContent ());
Page <XXXModel> ret = new PageImpl <XXXModel> (lstReturn, pageConf, param2);
(nativeQuery = true)를 가진 nativeQuery를 사용하는 경우 (LIMIT : sizeValue OFFSET : page)를 추가하여 쿼리에서 직접 페이지 매김을 수행할 수 있습니다.
참고: 이 메서드에 전달된 페이지 값은 오프셋 * 크기여야 합니다.
예
@Query(value = "SELECT * FROM person " +
"LIMIT ?1 OFFSET ?2", nativeQuery = true)
Optional<List<TDriverJob>> findPersons(int size, int page);
언급URL : https://stackoverflow.com/questions/22345081/spring-data-jpa-query-and-pageable
'source' 카테고리의 다른 글
| 하이버네이트 대신 경량? (0) | 2022.10.18 |
|---|---|
| Mysqld 프로세스를 시작/재시작하려고 하면 이미 프로세스가 존재합니다. (0) | 2022.10.18 |
| null=True와 blank=의 차이점은 무엇입니까?장고에서 사실인가요? (0) | 2022.10.18 |
| v-app-bar가 기본 높이를 유지하는 대신 낮은 페이지 콘텐츠에서 아래로 확장됨 (0) | 2022.10.18 |
| JavaScript 문자열 스트립()? (0) | 2022.10.18 |