我有两个对象。公司可以拥有多个嵌套地址。
@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;
}
Address类看起来像这样:
@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;
}
如果可能的话,我希望能够创建一个动态查询来搜索嵌套集合属性。我已经创建了一个使用示例匹配器的搜索方法,但结果是错误的。每次我从数据库获得所有内容,而不仅仅是我正在查找的有地址邮政编码的公司。
我的搜索方法如下:
@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)));
}
在我的数据库中,有两个对象,以下是搜索结果:。从结果可以看出,我收到了来自数据库的所有内容,而不仅仅是地址邮政编码以1开头的第一家公司。