Jpa 如何通过spring数据中的对象参数查找?

Jpa 如何通过spring数据中的对象参数查找?,jpa,spring-data,spring-data-jpa,Jpa,Spring Data,Spring Data Jpa,我不希望在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&l

我不希望在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);}
@实体
@表(name=“FOO”)
公开课Foo{
私有字符串名;
私有字符串lastName;
私有字符串名称;
私有字符串ssn;}
@存储库
公共接口FooDao扩展了crudepository{
Foo findByFoo(Foo Foo);}
本质上,这是查看在传递的foo对象中不为null的字段,并由它们进行查询,或者它按原样查询所有字段,这些字段可以为null,也可以不为null

假设
Foo
有很多字段,尝试编写单独的查询不会很优雅


我也知道我可以自己动态地做这件事,但如果已经有可能的话,我宁愿不这样做。

示例查询是Spring数据尚未提供的内容。然而,JPA还有一个基本的开放平台,SpringDataMongoDB有一个更高级的开放平台。请随时关注/投票相关问题。

如果没有QBE支持,下一个最佳解决方案将是利用Spring Data提供的QueryDSL支持。这将允许您根据Foo的任意数量的属性传递谓词,从而提供类似的功能

您的存储库将如下所示:

public interface FooRepository extends JpaRepository<Foo>, QueryDslPredicateExecutor {

}
公共接口FooRepository扩展了JpaRepository、QueryDSL谓词执行器{
}
QueryDSL代码生成器插件将生成一个查询对象QFoo,您可以使用它来构建一个predite,以传递给存储库的继承findAll(谓词)方法

e、 g

BooleanBuilder=newbooleanbuilder(QFoo.firstName(eq(“John”));
建筑商和(QFoo.姓氏(eq(“John”));
Iterable results=fooRepo.findAll(生成器);
有关更多示例,请参见此处:


大多数JPA提供商都支持
findByExample
机制。我有一个可以帮助您创建自己的JPA存储库实现,它提供了自己的
findByExample
BooleanBuilder builder = new BooleanBuilder(QFoo.firstName(eq("John"));
builder.and(QFoo.lastName(eq("John"));

Iterable<Foo> results = fooRepo.findAll(builder);