[SPRING] Spring JPA : 동일한 쿼리 인터페이스에서 다중 프로젝션 사용하기
SPRINGSpring JPA : 동일한 쿼리 인터페이스에서 다중 프로젝션 사용하기
나는 질의 결과에서 불필요한 데이터를 필터링하기 위해 Spring JPA의 투영법을 사용하려고합니다. 그러나 동일한 인터페이스 메소드에서 사용해야하는 프로젝션이 여러 개 있습니다.
문제는, 다른 반환 개체와 동일한 메서드에서 데이터를 쿼리하려고하지만 자바 허용하지 않습니다.
쿼리는 메서드 이름을 기반으로 JPA에 의해 자동 생성되므로 메서드 이름을 변경할 수 없습니다.
새로운 인터페이스를 만드는 것 이외에 대안이 있을까요? 번거롭고 불필요하다고 생각하기 때문에요.
여기에 내가하려고하는 것의 샘플 코드가있다.
public interface UserRepository extends CrudRepository<UserAccount, Long> {
AuthenticateProjection getByUsername(String username);
UserDetailsProjection getByUsername(String username);
}
public interface AuthenticateProjection {
@Value("#{target.username}")
String getUsername();
@Value("#{target.credentail.token}")
String getHashPassword();
}
public interface UserDetailsProjection {
@Value("#{target.username}")
String getUsername();
@Value("#{target.firstname}")
String getFirstName();
@Value("#{target.lastname}")
String getLastName();
}
해결법
-
==============================
1.그래서 저는 단일 쿼리로 여러 투영법을 사용하는 방법을 알아 냈습니다.
그래서 저는 단일 쿼리로 여러 투영법을 사용하는 방법을 알아 냈습니다.
<T> T getByUsername(String username, Class<T> projection)
이를 통해 메서드 호출자는 쿼리에 적용 할 프로젝션 유형을 지정합니다.
이 기능을 향상시키기 위해 오류가 발생하기 쉽도록 클래스를 매개 변수에 삽입 할 수 있도록 투영법을 확장해야하는 빈 인터페이스를 만들었습니다.
public interface JPAProjection { } public interface UserRepository extends CrudRepository<UserAccount, Long> { <T extends JPAProjection > T getByUsername(String username, Class<? extends JPAProjection> projection); }
public interface UserDetailsProjection extends JPAProjection{ @Value("#{target.username}") String getUsername(); @Value("#{target.firstname}") String getFirstname(); @Value("#{target.lastname}") String getLastname(); }
그런 다음 쿼리 메서드를 호출 할 수 있습니다.
getByUsername("...", UserDetailsProjection.class)
from https://stackoverflow.com/questions/43352967/spring-jpa-using-multiple-projection-on-same-query-interface by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring RedirectView에서 어떻게 addObject를 할 것인가? (0) | 2019.01.21 |
---|---|
[SPRING] Cordova POST - 금지 된 요청 403. Dispatcher 서블릿에 도달하지 않음 (0) | 2019.01.21 |
[SPRING] 봄 트랜잭션 cpool. 어느 것을 사용합니까? (0) | 2019.01.21 |
[SPRING] 어떻게 봄 통합에서 병렬 및 동 기적으로 처리 하는가? (0) | 2019.01.21 |
[SPRING] Tomcat에 배포하려고 할 때 발생 원인 : java.lang.NoSuchFieldError : NULL (0) | 2019.01.21 |