[英]Spring Data JPA Specification search for property in nested collection
[英]spring data jpa find all by example nested collection property
我有两个对象。 可以有多个嵌套地址的公司。
@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;
}
地址类如下所示:
@Data
@Entity
@Table(name = "address")
@ToString(exclude = "company")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "postal_code")
private String postalCode;
@Column(name = "city")
private String city;
@Column(name = "street")
private String street;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "company_id")
private Company company;
}
如果可能的话,我想以某种方式进行动态查询,搜索嵌套的集合属性。 我做了一个使用示例匹配器的搜索方法,但结果是错误的。 每次我从 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)));
}
如您所见,我从 DB 收到了所有内容,而不是唯一一家地址邮政编码以 1 开头的公司。
嗨,您可以使用Specification<T>
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
为此,您需要从接口 JpaSpecificationExecutor 扩展:
public interface UserRepository extends JpaRepository<User> ,JpaSpecificationExecutor<User>{
}
而且您还需要实现您的自定义Specification<T>
然后你可以使用 repository.findAll(your impleneted Specification);
春季文档:
我认为这很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.