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>{
}