Spring-Data-JPA 주석을 위한 setMaxResults?
Spring-Data-JPA를 프로젝트에 도입하려고 합니다.한 가지 혼란스러운 점은 주석으로 setMaxResults(n)를 달성하려면 어떻게 해야 합니까?
예를 들어, 내 코드:
public interface UserRepository extends CrudRepository<User , Long>
{
@Query(value="From User u where u.otherObj = ?1 ")
public User findByOtherObj(OtherObj otherObj);
}
나는 돌아오기만 하면 된다.one (and only one)
otherObj의 사용자인데 maxResults에 주석을 다는 방법을 찾을 수 없습니다.누가 힌트 좀 줄 수 있어?
(불만:
com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED **
WARN util.JDBCExceptionReporter - SQL Error: 0, SQLState: 07001
ERROR util.JDBCExceptionReporter - No value specified for parameter 2
)
https://jira.springsource.org/browse/DATAJPA-147, 링크를 찾았습니다.시도했지만 실패했습니다.지금은 안 될 것 같아요?이러한 중요한 기능이 Spring-Data에 포함되어 있지 않은 이유는 무엇입니까?
이 기능을 수동으로 실장하는 경우:
public class UserRepositoryImpl implements UserRepository
나는 미리 정의된 많은 방법들을 구현해야 한다.CrudRepository
이건 끔찍할 거야
환경: spring-3.1, spring-data-jpa-1.0.3.RELEASE.jar , spring-data-commons-core-1.1.0.릴리스.jar
스프링 데이터 JPA 1.7.0(Evans 릴리즈 트레인).
새로 도입된 를 사용할 수 있습니다.Top
그리고.First
다음과 같은 쿼리 방식을 정의할 수 있는 키워드입니다.
findTop10ByLastnameOrderByFirstnameAsc(String lastname);
스프링 데이터는 자동으로 정의된 수로 결과를 제한합니다(누락된 경우 기본값 1).여기서 결과의 순서는 (어느쪽이든) 관련성이 있습니다.OrderBy
예에서 볼 수 있는, 또는 예에서 볼 수 있는 조항Sort
매개 변수를 메서드에 입력합니다).자세한 내용은 Spring Data Evans 릴리즈 트레인의 신기능에 관한 블로그 투고 또는 매뉴얼을 참조하십시오.
이전 버전의 경우
데이터 슬라이스만 검색하려면 Spring Data는 다음과 같이 제공되는 페이지 번호 추상화를 사용합니다.Pageable
요구측 인터페이스 및Page
사물의 결과적인 측면에서의 추상화그럼 먼저
public interface UserRepository extends Repository<User, Long> {
List<User> findByUsername(String username, Pageable pageable);
}
다음과 같이 사용합니다.
Pageable topTen = new PageRequest(0, 10);
List<User> result = repository.findByUsername("Matthews", topTen);
결과의 콘텍스트를 알고 싶은 경우(실제로 어느 페이지입니까?)이게 첫 번째인가요?총 몇 개입니까?)를 사용합니다.Page
반환 유형:
public interface UserRepository extends Repository<User, Long> {
Page<User> findByUsername(String username, Pageable pageable);
}
클라이언트 코드는 다음과 같은 처리를 할 수 있습니다.
Pageable topTen = new PageRequest(0, 10);
Page<User> result = repository.findByUsername("Matthews", topTen);
Assert.assertThat(result.isFirstPage(), is(true));
실제 쿼리의 카운트 예측을 트리거하는 것은 아닙니다.Page
메타데이터를 계산하기 위해 총 몇 개의 요소가 있는지 확인해야 합니다.그 밖에도, 실제는, 이 시스템을PageRequest
안정적인 결과를 얻기 위해 정보를 정렬합니다.그렇지 않으면 조회를 두 번 트리거하여 아래에서 데이터가 변경되지 않았더라도 다른 결과를 얻을 수 있습니다.
.7 8의 Spring Data 1.7.0을 할 수 .@Query
최대 결과를 설정하는 주석:
public interface UserRepository extends PagingAndSortingRepository<User,Long> {
@Query("from User u where ...")
List<User> findAllUsersWhereFoo(@Param("foo") Foo foo, Pageable pageable);
default List<User> findTop10UsersWhereFoo(Foo foo) {
return findAllUsersWhereFoo(foo, new PageRequest(0,10));
}
}
다음과 같이 "주석에 의한 setMaxResults(n)"와 동등한 값을 제공할 수 있습니다.
public interface ISomething extends JpaRepository<XYZ, Long>
{
@Query("FROM XYZ a WHERE a.eventDateTime < :before ORDER BY a.eventDateTime DESC")
List<XYZ> findXYZRecords(@Param("before") Date before, Pageable pageable);
}
그러면 페이지 가능이 매개 변수로 전송될 때 문제가 해결됩니다.예를 들어 처음 10개의 레코드를 가져오려면 페이지 가능을 이 값으로 설정해야 합니다.
new PageRequest(0, 10)
Spring Data Evans 사용(1.7.0 릴리즈)
Spring Data JPA의 새로운 출시와 에반스라고 불리는 또 다른 모듈 목록을 함께 출시하는 것은 키워드를 사용하는 것을 특징으로 한다.Top20
★★★★★★★★★★★★★★★★★」First
결과를 , 쿼리 결과를 제한합니다.
그래서 이제 너는 글을 쓸 수 있다.
List<User> findTop20ByLastname(String lastname, Sort sort);
또는
List<User> findTop20ByLastnameOrderByIdDesc(String lastname);
또는 단일 결과를 위해
List<User> findFirstByLastnameOrderByIdDesc(String lastname);
가장 좋은 선택은 네이티브 쿼리입니다.
@Query(value="SELECT * FROM users WHERE other_obj = ?1 LIMIT 1", nativeQuery = true)
User findByOhterObj(OtherObj otherObj);
new PageRequest(0,10)
봄봄」을 사용하고 ).2.2.1.RELEASE
Sort
는 type입니다. 가가가가가protected
자녀 중 하거나 해당 자녀 클래스를 .of
다음 중 하나:
PageRequest.of(0, 10, Sort.sort(User.class).by(User::getFirstName).ascending()))
'아, 하다'는 생략할 수 있습니다.Sort
파라미터를 지정하고 기본 정렬을 암묵적으로 사용합니다.
PageRequest.of(0, 10)
함수 선언은 다음과 같습니다.
List<User> findByUsername(String username, Pageable pageable)
기능은 다음과 같습니다.
userRepository.findByUsername("Abbas", PageRequest.of(0,10, Sort.sort(User.class).by(User::getLastName).ascending());
또한 @QueryHints를 사용하여 실행할 수도 있습니다.아래 예에서는 org.eclipse를 사용합니다.persistence.config 를 지정합니다.QueryHints #JDBC_최대 행수
@Query("SELECT u FROM User u WHERE .....")
@QueryHints(@QueryHint(name = JDBC_MAX_ROWS, value = "1"))
Voter findUser();
의 클래스가 ★★★★★★★★★★★★★★★★★★★★★★★★★★.@Repository
를 확장하다JpaRepository
하다
int limited = 100;
Pageable pageable = new PageRequest(0,limited);
Page<Transaction> transactionsPage = transactionRepository.findAll(specification, pageable);
return transactionsPage.getContent();
가 getContent를 List<Transaction>
.
언급URL : https://stackoverflow.com/questions/9314078/setmaxresults-for-spring-data-jpa-annotation
'it-source' 카테고리의 다른 글
부모 POM에서 상속받은 아티팩트를 제외할 수 있는 방법이 있습니까? (0) | 2022.12.19 |
---|---|
크리스마스 트리는 어떻게 감지하나요? (0) | 2022.12.19 |
행별로 반복하면서 판다의 데이터 프레임 업데이트 (0) | 2022.12.19 |
MySQL의 카디널리티란? (0) | 2022.12.19 |
CodeIgniter의 머리글 및 바닥글 (0) | 2022.12.19 |