Java spring数据jpa按示例查找所有嵌套集合属性

Java spring数据jpa按示例查找所有嵌套集合属性,java,spring,spring-jdbc,query-by-example,Java,Spring,Spring Jdbc,Query By Example,我有两个目标。可以有多个嵌套地址的公司 @Entity @Data @Table(name = "company") public class Company { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Column(name = "name") private String name; @Co

我有两个目标。可以有多个嵌套地址的公司

@Entity
@Data
@Table(name = "company")
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "phone")
    private String phone;

    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private List<Address> addresses;
}
如果可能的话,我想做一个动态查询,搜索嵌套集合属性。我做了一个使用示例匹配器的搜索方法,但结果是错误的。每次我都从DB那里得到了所有东西,而不是我要找的唯一一家有地址和邮政编码的公司

我的搜索方法如下所示:

@PostMapping("/search")
    public List<Company> search(@RequestBody final Company company){
        return companyRepository.findAll(Example.of(company,
                ExampleMatcher.matchingAny()
                        .withIgnoreNullValues()
                        .withIgnorePaths("id")
                        .withStringMatcher(ExampleMatcher.StringMatcher.STARTING)));
    }
@PostMapping(“/search”)
公共列表搜索(@RequestBody final Company){
return companyRepository.findAll(例如,公司、,
例如matcher.matchingAny()
.withIgnoreNullValues()
.具有忽略路径(“id”)
.withStringMatcher(例如matcher.StringMatcher.STARTING));
}
在我的数据库中,我有两个对象,这是搜索的结果:


正如您所看到的,我从DB收到了所有信息,而不是第一家地址以1开头的公司。

您好,您可以使用
规范

为此,您需要从接口JpaSpecificationExecutor扩展:

public interface UserRepository extends JpaRepository<User> ,JpaSpecificationExecutor<User>{
}
public interface UserRepository扩展了JpaRepository,JpaSpecificationExecutor{
}
您还需要实现自定义的
规范

然后您可以使用repository.findAll(您的嵌入式规范)

Spring文档:


我认为这很有帮助。

谢谢。我考虑过,这是解决这个问题的一个选择。另一个选项是查询DSL。但我想知道是否有可能用qbe解决这个问题。你们可以在列表中创建客户实体
public interface UserRepository extends JpaRepository<User> ,JpaSpecificationExecutor<User>{
}