findBy / findAllBy의 스프링 데이터 JPA 차이
Spring Data JPA 키워드를 사용할 때 다음 사이에 차이가 있습니까?
List<SomeEntity> findBySomeCondition();
그리고.
List<SomeEntity> findAllBySomeCondition();
아니요, 이 둘은 차이가 없습니다.이러한 쿼리는 동일한 쿼리를 실행합니다.All
메서드 이름에서 쿼리를 파생할 때 스프링 데이터에 의해 부품이 무시됩니다.유일하게 중요한 부분은By
키워드, 그 뒤에 오는 모든 키워드는 필드명으로 취급됩니다(다른 키워드는 제외).OrderBy
우연히도 다음과 같은 이상하게 보이는 방법 이름이 생길 수 있습니다.findAllByOrderByIdAsc
).
이는 다음과 같은 것이 완벽하게 유효하다는 것을 의미합니다.
List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();
또한 다음과 같은 SQL 쿼리를 수행합니다.
List<SomeEntity> findBySomeCondition();
아니면
List<SomeEntity> findAllBySomeCondition();
스프링 데이터 2.3.6 릴리즈 매뉴얼에서는 다음 기능에 대해 설명합니다.
사이의 임의의 텍스트
find
(또는 기타 도입 키워드) 및By
다음과 같은 결과 검색 키워드 중 하나를 사용하지 않는 한 설명에 도움이 되는 것으로 간주됩니다.Distinct
생성할 쿼리에 고유 플래그를 설정하거나Top
/First
쿼리 결과를 제한합니다.
이 기능의 목적은 Spring Data의 다음 2.0 릴리즈에 대한 블로그 투고에서 설명되었습니다.
Spring Data 메서드 구문 분석에서는 다음과 같은 접두사 키워드를 사용합니다.
find
,exists
,count
,그리고.delete
및 종료By
키워드를 지정합니다.당신이 그 사이에 넣은 모든 것find
그리고.By
는 메서드 이름을 더욱 표현하기 쉽게 하며 쿼리 파생에는 영향을 주지 않습니다.
차이를 설명하기 위해 다음 두 가지 기능을 살펴보겠습니다.
1. Set<Policy> findAllByRoleIn(Iterable<Role> role);
2. Set<Policy> findByRoleIn(Iterable<Role> role);
첫 번째 함수에 의해 생성된 쿼리:
1. select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
두 번째 함수에 의해 생성된 쿼리:
2. select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
결론:두 함수에 의해 생성된 쿼리를 보면 분명합니다.두 함수 정의 사이에 차이가 없다는 것을 명확히 알 수 있습니다. 두 함수 정의 사이에는 차이가 없습니다.
한 가지 차이점은 findAllBy Hibernate 필터(org.hibernate.annotations의 @Filters)가 적용되어 다른 SQL이 적용된다는 것입니다.
실제로 findallBy와 findby의 차이점은 findAllBy는 컬렉션을 반환하지만 findBy는 Optional을 반환한다는 것입니다.
따라서 List find By를 쓰는 대신 List find All By를 쓰는 것이 좋습니다(단, :p도 동작합니다).[ Optional find All By ]대신 [Optional find By]라고 씁니다.
이 문서 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ #sublicatories.core-displaces를 체크합니다.
findBy 메서드는 이름 또는 다음과 같은 다른 기준으로 검색할 때 사용됩니다.findByFirstName(String firstName);
find 일반적으로 사양을 제공하여 찾는 모든 메서드
List<T> findAll(Specification<T> spec);
자세한 내용은 아래 문서를 참조하십시오.
http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html
언급URL : https://stackoverflow.com/questions/37253571/spring-data-jpa-difference-between-findby-findallby
'programing' 카테고리의 다른 글
jQuery를 사용하여 JS 개체를 배열로 변환 (0) | 2022.10.28 |
---|---|
JAR 내에 JAR을 포함한 클래스 패스 (0) | 2022.10.28 |
영숫자만 허용하는 Javascript용 RegEx (0) | 2022.10.28 |
Java String.trim()은 몇 개의 공간을 삭제합니까? (0) | 2022.10.28 |
Panda 데이터 프레임에서 NaN 값이 들어 있는 열을 찾는 방법 (0) | 2022.10.28 |