我希望它可以按所有字段进行搜索,而不是在spring数据中指定要搜索的对象的字段。 E.g:
@Entity
@Table(name="FOO")
public class Foo{
private String firstName;
private String lastName;
private String middleName;
private String ssn;}
@Repository
public interface FooDao extends CrudRepository<Foo, Long>{
Foo findByFoo(Foo foo);}
基本上它的作用是查看传递的foo对象中的非空字段以及它们的查询或者它们按照它们的方式查询所有字段,可以为null或不为null。
假设Foo
有很多字段,并且尝试编写单个查询并不是很优雅。
我也明白,我可以自己动态地做到这一点,但如果已经可行,我宁愿不这样做。
答案 0 :(得分:2)
通过示例查询是Spring Data尚未提供的。但是,对于JPA,有一个基本的PR开放,对于Spring Data MongoDB,可以使用更高级的feature branch。请随时观看/投票查看相关问题DATAJPA-218和DATAMONGO-1245。
答案 1 :(得分:1)
在没有QBE支持的情况下,下一个最佳解决方案是利用Spring Data提供的QueryDSL支持。这将允许您根据Foo的任意数量的属性传递谓词,从而为您提供类似的功能。
您的存储库将如下所示:
public interface FooRepository extends JpaRepository<Foo>, QueryDslPredicateExecutor {
}
QueryDSL代码生成器插件将生成一个查询对象QFoo,您可以使用它来构建Prediate以传递到存储库的继承的findAll(Predicate谓词)方法。
e.g。
BooleanBuilder builder = new BooleanBuilder(QFoo.firstName(eq("John"));
builder.and(QFoo.lastName(eq("John"));
Iterable<Foo> results = fooRepo.findAll(builder);
请参阅此处以获取更多示例:
http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
http://docs.spring.io/spring-data/jdbc/docs/current/reference/html/core.querydsl.html