[SPRING] @NamedQuery가 Spring 데이터 나머지에서 findAll을 오버라이드합니다. JpaRepository
SPRING@NamedQuery가 Spring 데이터 나머지에서 findAll을 오버라이드합니다. JpaRepository
Spring 데이터 나머지에 의해 실행 된 findAll 쿼리를 오버라이드 할 수있는 방법이 있습니까?
몇 가지 구체적인 기준에 따라 결과를 필터링하는 방법이 필요하며 @NamedQuery를 사용하면 내가 원하는 것을 찾았을 것입니다. 그래서 테스트를 설정합니다.
@Entity
@Table(name = "users")
@NamedQueries({
@NamedQuery(name = "User.findAll", query="SELECT u FROM User u WHERE u.username = 'test'"),
@NamedQuery(name = "User.findNameEqualsTest", query="SELECT u FROM User u WHERE u.username = 'test'")
})
public class User implements Serializable, Identifiable<Long> { }
이 자리에서 나는 SDR이 내 findAll () 쿼리 (1 개의 결과를 반환)를 사용할 것으로 기대하지만, 대신 이전의 동일한 findAll 로직 (모든 결과를 반환)을 실행합니다.
내 저장소에 다음을 추가했습니다.
@Repository
@RestResource(path = "users", rel = "users")
public interface UserJpaRepository extends JpaRepository<User, Long> {
public Page<User> findNameEqualsTest(Pageable pageable);
}
이 경우 제공된 @NamedQuery를 선택합니다. 그래서...
기본 findAll () 로직을 재정의하려면 어떻게해야합니까? 실제로 복잡한 일련의 기준을 구성하고 결과 세트에 적용해야합니다.
해결법
-
==============================
1.예, 저장소 인터페이스의 구현을 만들 수 있습니다.
예, 저장소 인터페이스의 구현을 만들 수 있습니다.
http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/repositories.html#repositories.custom-implementations
저장소
@Repository public interface PagLogRepository extends JpaRepository<PagLogEntity, Long>, PagLogCustomRepository {
사용자 인터페이스
public interface PagLogCustomRepository { PagLogEntity save(SalesForceForm salesForceForm) throws ResourceNotFoundException;
맞춤 구현
public class PagLogRepositoryImpl implements PagLogCustomRepository { @Override public PagLogEntity save(final SalesForceForm salesForceForm) throws ResourceNotFoundException { query = emEntityManager.createNamedQuery("findItemFileByDenormalizedSku", ItemFileEntity.class); query.setParameter("skuValue", rawSku);
다시 정의하지 않고 findAll로 저장 한 다음 복잡한 사용자 정의를 작성할 수 있습니다.
-
==============================
2.Spring Data JPA의 차후 버전 1.5 (RC는 마일스톤 저장소에서 사용 가능)에서 저장소 인터페이스의 메소드를 다시 선언하고 @Query로 주석을 달아 쿼리 메소드로 실행되도록합니다. 이렇게하면 쿼리 메서드에서 이미 익숙해 진 것처럼 명명 된 쿼리가 조회됩니다.
Spring Data JPA의 차후 버전 1.5 (RC는 마일스톤 저장소에서 사용 가능)에서 저장소 인터페이스의 메소드를 다시 선언하고 @Query로 주석을 달아 쿼리 메소드로 실행되도록합니다. 이렇게하면 쿼리 메서드에서 이미 익숙해 진 것처럼 명명 된 쿼리가 조회됩니다.
interface UserJpaRepository extends PagingAndSortingRepository<User, Long> { @Query List<User> findAll(); Page<User> findNameEqualsTest(Pageable pageable); }
저장소 선언에 대한 몇 가지 참고 사항 :
from https://stackoverflow.com/questions/21734149/namedquery-override-findall-in-spring-data-rest-jparepository by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 콩에 EJB 3 주입 (0) | 2019.01.21 |
---|---|
[SPRING] <form : select>에서 데이터를 전달하는 방법 Spring MVC (0) | 2019.01.21 |
[SPRING] Spring 보안을 사용하여 세션 시간 초과 메시지를 얻는 방법 (0) | 2019.01.21 |
[SPRING] Spring Controller에서 web.xml의 <context-param> 값에 접근하는 방법 (0) | 2019.01.21 |
[SPRING] 선언적인 트랜잭션 (@Transactional)은 Spring의 @Repository와 작동하지 않습니다. (0) | 2019.01.21 |