如何在 spring 数据中查找对象参数?
How to findBy Object argument in spring data?
我不想在 spring 数据中指定要搜索的对象字段,而是希望它按所有字段进行搜索。例如:
@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 或不为 null。
假设 Foo
有很多字段并且尝试编写单个查询不会很优雅。
我也明白我可以自己动态地做到这一点,但如果已经可以的话,我宁愿不这样做。
Spring数据尚未提供示例查询。但是有一个基本的 PR open for JPA and a more advanced feature branch available for Spring Data MongoDB. Please feel free to watch/vote for the related issues DATAJPA-218 and DATAMONGO-1245.
在没有 QBE 支持的情况下,下一个最佳解决方案是利用 Spring Data 提供的 QueryDSL 支持。这将允许您基于 Foo 的任意数量的属性传递谓词,从而为您提供类似的功能。
您的存储库将如下所示:
public interface FooRepository extends JpaRepository<Foo>, QueryDslPredicateExecutor {
}
QueryDSL 代码生成器插件将生成一个查询对象 QFoo,您可以使用它来构建 Prediate 以传递给存储库的继承 findAll(Predicate predicate) 方法。
例如
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
我不想在 spring 数据中指定要搜索的对象字段,而是希望它按所有字段进行搜索。例如:
@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 或不为 null。
假设 Foo
有很多字段并且尝试编写单个查询不会很优雅。
我也明白我可以自己动态地做到这一点,但如果已经可以的话,我宁愿不这样做。
Spring数据尚未提供示例查询。但是有一个基本的 PR open for JPA and a more advanced feature branch available for Spring Data MongoDB. Please feel free to watch/vote for the related issues DATAJPA-218 and DATAMONGO-1245.
在没有 QBE 支持的情况下,下一个最佳解决方案是利用 Spring Data 提供的 QueryDSL 支持。这将允许您基于 Foo 的任意数量的属性传递谓词,从而为您提供类似的功能。
您的存储库将如下所示:
public interface FooRepository extends JpaRepository<Foo>, QueryDslPredicateExecutor {
}
QueryDSL 代码生成器插件将生成一个查询对象 QFoo,您可以使用它来构建 Prediate 以传递给存储库的继承 findAll(Predicate predicate) 方法。
例如
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