Я должен изменить запрос SQL, вызванный HTTP-запросом из этого:
SELECT * FROM inventory WHERE interface = 'Ethernet'
к этому
SELECT * FROM inventory WHERE interface LIKE '%Ethernet%'
Метод Resource, обрабатывающий HTTP-запрос, выглядит так:
// InventoryResource.java
@GetMapping("/inventories")
@Timed
public ResponseEntity<List<Inventory>> getAllInventories(InventoryCriteria criteria) {
List<Inventory> page = inventoryQueryService.findByCriteria(criteria);
return new ResponseEntity<>(page, HttpStatus.OK);
}
Служба запросов
// inventoryQueryService.java
@Transactional(readOnly = true)
public List<Inventory> findByCriteria(InventoryCriteria criteria) {
final Specifications<Inventory> specification = createSpecification(criteria);
return inventoryRepository.findAll(specification);
}
Затем есть построитель критериев:
private Specifications<Inventory> createSpecification(InventoryCriteria criteria) {
Specifications<Inventory> specification = Specifications.where(null);
// ....
if (criteria != null) {
specification = specification.and(buildStringSpecification(criteria.getInterfaceType(), Inventory_.interfaceType));
}
// ....
return specification;
}
Поля и методы для построения запроса определены здесь:
public class InventoryCriteria implements Serializable {
private static final long serialVersionUID = 1L;
private LongFilter index;
// ...
private StringFilter interfaceType;
// ...
// ...
public StringFilter getInterfaceType() {
return interfaceType;
}
// ...
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("InventoryCriteria [index=");
builder.append(index);
// ...
builder.append(", interfaceType=");
builder.append(interfaceType);
// ...
builder.append("]");
return builder.toString();
}
}
Итак, я полагаю, что эта строка: specification = specification.and(buildStringSpecification(criteria.getInterfaceType(), Inventory_.interfaceType));
следует изменить. Но непонятно как.