【发布时间】:2017-03-16 00:18:01
【问题描述】:
我有一个 Spring Data Rest 存储库,它利用此处概述的 QueryDSL 支持:
https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling#spring-data-rest
默认是使用equals查询所有指定的参数。在同一篇文章中提供了一种将参数绑定覆盖到 equals 之外的机制,但它需要 Java 8。
https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling#querydsl-web-support
Java 7 中是否有任何简洁的方法来实现相同的功能?
更新
我可以让绑定自定义工作如下:
@Override
public void customize(QuerydslBindings bindings, QMember member) {
bindings.bind(member.forename).first(new SingleValueBinding<StringPath, String>() {
@Override
public Predicate bind(StringPath path, String value) {
return path.like(value);
}
});
bindings.bind(member.surname).first(new SingleValueBinding<StringPath, String>() {
@Override
public Predicate bind(StringPath path, String value) {
return path.startsWith(value);
}
});
}
但是,这些示例都使用存储库接口上的 Java 8 默认方法来应用它们。
public interface MemberRepository extends JpaRepository<Member, Long>,
QueryDslPredicateExecutor<Member>,QuerydslBinderCustomizer<QMember> {
default void customize(QuerydslBindings bindings, QMember member) {
....
}
}
在 Java 7 中,这显然是不可能的。我尝试过使用自定义存储库,但是失败并出现错误:
org.springframework.data.mapping.PropertyReferenceException:没有为类型成员找到自定义属性!
public interface MemberRepositoryCustom {
public void customize(QuerydslBindings bindings, QMember member);
}
public class MemberRepositoryCustomImpl implements MemberRepositoryCustom {
@Override
public void customize(QuerydslBindings bindings, QMember member) {
bindings.bind(member.forename).first(new SingleValueBinding<StringPath, String>() {
@Override
public Predicate bind(StringPath path, String value) {
return path.like(value);
}
});
bindings.bind(member.surname).first(new SingleValueBinding<StringPath, String>() {
@Override
public Predicate bind(StringPath path, String value) {
return path.startsWith(value);
}
});
}
}
【问题讨论】:
标签: spring-data spring-data-rest