[SPRING] Spring 데이터로 읽기 전용 저장소 만들기
SPRINGSpring 데이터로 읽기 전용 저장소 만들기
스프링 데이터를 사용하여 읽기 전용 리포지토리를 생성 할 수 있습니까?
findAll (), findOne () 및 @Queryannotation과 함께 일부 메소드와 같은 저장소를 제공하고 싶은 일부 엔티티 뷰와 일부 엔티티가 있습니다. save (...) 및 delete (...)와 같은 메서드를 제공하는 것을 피하고 싶습니다. 왜냐하면 아무 의미가 없으므로 오류가 발생할 수 있기 때문입니다.
public interface ContactRepository extends JpaRepository<ContactModel, Integer>, JpaSpecificationExecutor<ContactModel> {
List<ContactModel> findContactByAddress_CityModel_Id(Integer cityId);
List<ContactModel> findContactByAddress_CityModel_Region_Id(Integer regionId);
// ... methods using @Query
// no need to save/flush/delete
}
감사!
해결법
-
==============================
1.그렇습니다. 직접 만드는 방법은 수제 기본 저장소를 추가하는 것입니다. 일반적으로 다음과 같은 것을 사용합니다.
그렇습니다. 직접 만드는 방법은 수제 기본 저장소를 추가하는 것입니다. 일반적으로 다음과 같은 것을 사용합니다.
public interface ReadOnlyRepository<T, ID extends Serializable> extends Repository<T, ID> { T findOne(ID id); Iterable<T> findAll(); }
이제 정확히 정의 된 repos를 확장 할 수 있습니다 :
public interface PersonRepository extends ReadOnlyRepository<Person, Long> { T findByEmailAddress(String emailAddress); }
기본 저장소를 정의하는 중요한 부분은 메소드 선언이 CrudRepository에 선언 된 메소드와 동일한 서명을 가지고 있다는 것입니다. 그렇다면 호출을 저장소 빈을 지원하는 구현 빈으로 라우트 할 수있는 경우입니다. SpringSource 블로그에서 그 주제에 대한보다 자세한 블로그 게시물을 작성했습니다.
-
==============================
2.Oliver Gierke의 대답을 확장하기 위해 최신 버전의 Spring Data에서는 응용 프로그램 시작 오류를 방지하기 위해 ReadOnlyRepository (부모 인터페이스)에 @NoRepositoryBean 주석이 필요합니다.
Oliver Gierke의 대답을 확장하기 위해 최신 버전의 Spring Data에서는 응용 프로그램 시작 오류를 방지하기 위해 ReadOnlyRepository (부모 인터페이스)에 @NoRepositoryBean 주석이 필요합니다.
import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.Repository; @NoRepositoryBean public interface ReadOnlyRepository<T, ID extends Serializable> extends Repository<T, ID> { T findOne(ID id); List<T> findAll(); }
-
==============================
3.문서에서 볼 수있는 한, org.springframework.data.repository.Repository를 구현하면 가능합니다.
문서에서 볼 수있는 한, org.springframework.data.repository.Repository를 구현하면 가능합니다.
-
==============================
4.나를 위해 다음 일했습니다. 올리버의 솔루션을 사용하여 오류가 발생했습니다. init 메소드의 호출이 실패했습니다. 중첩 예외는 org.springframework.data.mapping.PropertyReferenceException : 시작하는 동안 유형에 대해 findOne 속성을 찾을 수 없습니다.
나를 위해 다음 일했습니다. 올리버의 솔루션을 사용하여 오류가 발생했습니다. init 메소드의 호출이 실패했습니다. 중첩 예외는 org.springframework.data.mapping.PropertyReferenceException : 시작하는 동안 유형에 대해 findOne 속성을 찾을 수 없습니다.
@NoRepositoryBean public interface ReadOnlyRepository<T,ID> extends Repository<T, ID> { Optional<T> findById(ID var1); boolean existsById(ID var1); Iterable<T> findAll(); Iterable<T> findAllById(Iterable<ID> var1); long count(); }
from https://stackoverflow.com/questions/11107136/creating-a-read-only-repository-with-springdata by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Security의 username-password grant에서 새로 고침 토큰을 사용하여 새 액세스 토큰 요청 OAuth2 (0) | 2019.03.13 |
---|---|
[SPRING] Spring에서 javax.inject.Provider를 사용해야 할 때? (0) | 2019.03.13 |
[SPRING] DELETE 요청 본문에 데이터 전달 (0) | 2019.03.13 |
[SPRING] Spring Rest 서비스와 Jersey Rest Service 및 Spring + Jersey 솔루션의 차이점은 무엇입니까? (0) | 2019.03.13 |
[SPRING] Spring 데이터 JPA. findAll () 메소드에서 ID 목록 만 얻는 방법 (0) | 2019.03.13 |