[SPRING] <S extends T> save (S 엔티티) 란 무엇을 의미합니까? Spring Repository에서?
SPRING save (S 엔티티) 란 무엇을 의미합니까? Spring Repository에서?
Spring Data 프로젝트에서 CrudRepository는 관리되는 엔티티 클래스에 대해 정교한 CRUD 기능을 제공합니다.
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
<S extends T> S save(S entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
// … more functionality omitted.
}
일반적으로, "S extends T"가 의미하는 바를 알고 있습니다. 즉, 저장 작업의 반환 유형 인 S는 T의 하위 유형이어야합니다. 왜 제약 조건을 추가해야합니까? 나는 이것이 다음과 같이하는 것이 좋을 것이라고 생각한다.
T save (T entity);
에서와 같이
void delete(T entity);
나는 더 많은 도움을 찾기 위해 봤는데 stackoverflow 자체에 대한 다음 질문을 알아 냈지만 정말 나를 위해 명확하지 않습니다.
Spring CrudRepository : 새로운 제네릭 타입 S를 발명하는 이유
고맙습니다.
해결법
-
==============================
1.당신이 그것을 가지고 있다면
당신이 그것을 가지고 있다면
T save (T entity);
그런 다음 결과를 할당 할 수있는 유일한 변수는 T 유형이어야합니다.
따라서, CrudRepository
저장소가 있고 Dog dog = getDog(); Dog savedDog = repository.save(dog);
컴파일 오류가 발생합니다. 결과는 Dog에 할당 할 수 없습니다.이 유형은 T 유형 (이 경우 Animal)이어야합니다.
반환 값이 실제로 Dog 유형인지 확인하고, 그렇다면 Dog에 캐스팅하여 savedDog에 넣어야합니다.
선언을 그대로 사용하면 원래 인수와 동일한 유형의 변수에 값을 할당 할 수 있다는 것을 의미합니다. 유형 확인에서 허용됩니다.
선언 그 자체는 개가 아닌 동물 부분이 저장되는 방법을 지정하지 않습니다. 그것이 원래 Dog 일 경우 결과는 Dog에 할당 할 수 있습니다.
from https://stackoverflow.com/questions/41960743/what-does-it-mean-s-extends-t-save-s-entity-in-spring-repository by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 여러 로그인 양식, 다양한 인증 관리자 - 최신 스프링 보안 (0) | 2019.02.13 |
---|---|
[SPRING] Spring 부트 : Spring은 .properties 파일에 존재 함에도 불구하고 항상 디폴트 값을 속성에 할당합니다. (0) | 2019.02.13 |
[SPRING] JMockit을 사용하여 자동 인터페이스 구현 구현하기 (0) | 2019.02.13 |
[SPRING] log4j2로 작성되지 않은 스프링 로그 (0) | 2019.02.13 |
[SPRING] 봄에 속성 파일 값 쓰기 / 업데이트 (0) | 2019.02.13 |