У меня есть два объекта. Компания, которая может иметь несколько вложенных адресов.
@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;
}
Я хочу как-нибудь, если это возможно, сделать динамический запрос, который ищет через свойство вложенной коллекции. Я сделал метод поиска, который использует пример соответствия, но результат неправильный. Каждый раз, когда я получал все от БД, а не только компанию с почтовым индексом, который я ищу.
Мой метод поиска выглядит так:
@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)));
}
В моей базе данных у меня есть два объекта, и это результат поиска:
![enter image description here](https://i.stack.imgur.com/wXer3.png)
Как видите, я получил все от БД вместо единственной первой компании, почтовый индекс которой начинается с 1.