스프링 데이터에서의 findBy와 findOneBy의 차이점 JPA
지금까지 알고 있는 것은 FindBy는 여러 결과를 반환할 수 있는 반면 FindOneBy는 단일 결과를 반환하거나 다음과 같이 사용할 경우 null을 반환하는 것입니다.
List<Department> findByDepartmentName(String name);
Department findOneByDepartmentId(Long Id);
이제 제 질문은 findBy를 이 방법으로 사용해도 될까요?
Department findByDepartmentId(Long Id);
만약 그렇다면,
- 주어진 ID에 대한 레코드가 여러 개 있다고 가정합니다.
- findBydepartmentId는 어떤 기준으로 단일 레코드를 반환합니까?
마지막으로 findOneBy 대신 findBy를 사용하면 안 되는 이유 또는 시기입니다.
사용할 수 있습니까?
findBy
이쪽으로요?부서findByDepartmentId(Long Id)
;
네, 이 구문은 Spring JPA의 관점에서 볼 때 기술적으로 정확합니다.Spring JPA는 반품 유형도 확인함으로써 달성하고자 하는 바를 추론합니다.
기본적으로 반환 타입의 경우는 다음과 같습니다.
쿼리를 사용하여 단일 값을 반환할 수 있습니다.
basic type
,Entity T
, , 등쿼리를 사용하여 T 컬렉션을 반환할 수 있습니다. , , 등을 지정할 수 있습니다.
즉, 쿼리 정의는 다음과 같습니다.
Department findByDepartmentId(Long Id);
1개의 결과를 기대하는 것을 의미합니다(지정되어 있기 때문에).Entity T
반환 타입으로서).이것은 Spring JPA가 쿼리를 실행하는 방법을 반영합니다.이것은 인터페이스를 호출하고, 이 인터페이스를 호출하면, 이 라우터는,exception
둘 이상의 개체가 기준을 충족하는 경우.
어떤 기준으로 할 것인가?
findBydepartmentId
싱글 레코드를 반환할 수 있습니까?
해당 ID를 가진 단일 개체가 있으면 예외가 발생합니다.
언제 또는 왜 사용하지 않는가?
findBy
대신해서findOneBy
?
그 두 가지는 다른 의미를 가지고 있고 서로 바꿀 수 없다.
findOneBy
는 항상 호출됩니다.
findBy
위의 정의에 따라 반환 유형에 따라 동작이 달라집니다.
findOneByXX
는 값이 1개만 있는지 없는지 확인합니다.값이 2개일 경우 예외가 느려집니다.
하지만findByXX
독특함을 체크하는 건 아닙니다
몇 가지 테스트를 수행했는데 Spring Data는 메서드 사이의 모든 문자를 무시합니다(find
,delete
,...) 및By
.
https://github.com/spring-projects/spring-data-commons/blob/14d5747f68737bb44441dc511cf16393d9d85dc8/src/main/java/org/springframework/data/repository/query/parser/PartTree.java#L65에서는\p{Lu}.*?
syslog.syslog.
스프링 데이터는 반응 처리 방법을 결정하는 데 반환 유형만 사용합니다.
따라서 의미론적으로 정확하지 않더라도 다음 방법을 정의할 수 있습니다.
Department findAllByDepartmentId(Long Id);
List<Department> findOneByDepartmentName(String name);
언급URL : https://stackoverflow.com/questions/45988295/difference-between-findby-and-findoneby-in-spring-data-jpa
'it-source' 카테고리의 다른 글
.docx, .pptx 등의 올바른 MIME 유형은 무엇입니까? (0) | 2023.03.27 |
---|---|
새 사용자 지정 테마에 Woocommerce 등급이 표시되지 않음 (0) | 2023.03.27 |
Oracle 데이터베이스에 허용된 최대 연결 수를 확인하는 방법은 무엇입니까? (0) | 2023.03.27 |
URL 매개 변수가 있는 WordPress REST API 사용자 지정 끝점 (0) | 2023.03.27 |
여러 get 요청을 요청하는 API 가져오기 (0) | 2023.03.27 |