我和春天數據和Neo4j的在我的當前項目工作,有以下情況的:傳遞可選參數@Query Spring的數據存儲庫的方法
@RestController
@RequestMapping(value = SearchResource.URI)
public class PersonResource {
public static final String URI = "/person";
@Autowired
PersonRepository personRepository;
@GetMapping
public Collection<Person> findPersons(
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "birthDate", required = false) Long birthDate,
@RequestParam(value = "town", required = false) Spring town) {
Collection<Person> persons;
if (name != null && birthDate == null && town == null) {
persons = personRepository.findPersonByName(name);
} else if (name != null && birthDate != null && town == null {
persons = personRepository.findPersonByNameAndBirthDate(name, birthDate);
} else if (name != null && birthDate != null && town != null {
persons = personRepository.findPersonByNameAndBirthDateAndTown(name, birthDate, town);
} else if (name == null && birthDate != null && town == null {
persons = findPersonByBirthDate(birthDate);
} else if
...
}
return persons;
}
}
你或許已經可以看到我的問題:鏈條如果其他塊。每次我添加一個新的過濾器來搜索人員時,我必須添加新的可選參數,將所有if-else-blocks加倍,並將新的find-Methods添加到我的PersonRepository中。所有find-Methods都使用Spring @Query註釋進行註釋,並獲取自定義密碼查詢以獲取數據。
是否有可能以更優雅的方式實現此功能? Spring Data在這種情況下是否提供任何支持?
爲您的存儲庫定義自定義方法(https://docs.spring.io/spring-data/neo4j/docs/4.2.6.RELEASE/reference/html/#repositories.single-repository-behaviour)。在方法實現中,根據搜索條件動態生成查詢並執行它。 –
您可以嘗試使用此方法https://stackoverflow.com/a/44705452 – Cepr0