반응형
Spring Data에서 동일한 QueryDSL 경로에 대해 여러 개
확장되는 일반 Spring Data 저장소 인터페이스가 있습니다.QuerydslBinderCustomizer
, 쿼리 실행을 사용자 정의할 수 있습니다.기본 저장소 구현에 내장된 기본 동등성 테스트를 확장하여 Spring Data REST를 사용하여 다른 쿼리 작업을 수행할 수 있도록 하려고 합니다.예를 들어,
GET /api/persons?name=Joe%20Smith // This works by default
GET /api/persons?nameEndsWith=Smith // This requires custom parameter binding.
문제는 제가 만든 엔티티 경로의 모든 별칭이 이전 별칭 바인딩을 무시하는 것처럼 보인다는 것입니다.
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID>, QueryDslPredicateExecutor<T>, QuerydslBinderCustomizer {
@Override
@SuppressWarnings("unchecked")
default void customize(QuerydslBindings bindings, EntityPath entityPath){
Class<T> model = entityPath.getType();
Path<T> root = entityPath.getRoot();
for (Field field: model.getDeclaredFields()){
if (field.isSynthetic()) continue;
Class<?> fieldType = field.getType();
if (fieldType.isAssignableFrom(String.class)){
// This binding works by itself, but not after the next one is added
bindings.bind(Expressions.stringPath(root, field.getName()))
.as(field.getName() + "EndsWith")
.first((path, value) -> {
return path.endsWith(value);
});
// This binding overrides the previous one
bindings.bind(Expressions.stringPath(root, field.getName()))
.as(field.getName() + "StartsWith")
.first((path, value) -> {
return path.startsWith(value);
});
}
}
}
}
동일한 필드에 대해 둘 이상의 별칭을 만들 수 있습니까?이것이 일반적인 방법으로 이루어질 수 있습니까?
QueryDSL에 바인딩된 과도 속성을 다음과 같은 방법으로 생성할 수 있습니다.
@Transient
@QueryType(PropertyType.SIMPLE)
public String getNameEndsWith() {
// Whatever code, even return null
}
QueryDSL 주석 처리기를 사용하는 경우 메타데이터 Qxx 클래스에 "EndsWith"라는 이름이 표시되므로 유지되지 않고 다른 속성처럼 바인딩할 수 있습니다.
언급URL : https://stackoverflow.com/questions/41667317/creating-multiple-aliases-for-the-same-querydsl-path-in-spring-data
반응형
'programing' 카테고리의 다른 글
워크시트의 "마지막" 셀 강제 새로 고침 (0) | 2023.09.08 |
---|---|
목표 C에서 'int' 배열의 길이 (0) | 2023.09.08 |
YamlPropertiesFactoryBean을 사용하여 Spring Framework 4.1을 사용하여 YAML 파일을 로드하는 방법은 무엇입니까? (0) | 2023.09.08 |
경고: CSRF 토큰 인증 레일을 확인할 수 없습니다. (0) | 2023.09.08 |
부트스트랩은 나비 막대 항목을 오른쪽으로 정렬합니다. (0) | 2023.09.08 |