我将Spring-data-neo4j
与CrudRepository
@Repository
public interface PersonRepository extends GraphRepository<Person> {}
我有一个Html表单,其中包含3个输入FirstName,Name,Age,所以我可以选择多个条件:All, FirstName, FirstName + Name, FirstName + Age etc....
我想用Map或其他东西制作“多标准查找”。有可能吗?
我在我的CRUD中试试这个:
List<Person> findByFirstnameAndNameAndAge(String firstname, String name, int age);
但如果一个或所有参数为空,则无效。
答案 0 :(得分:0)
尝试使用地图和@Query注释
@Query("MATCH (u:Person) WHERE u.name = {param}.name OR u.age = {param}.age RETURN u")
List<Person> findDynamic(@Param("param") Map params);
答案 1 :(得分:0)
您好@Michael Hunger感谢您的回复。这不完全是我的预期,但你给了我一些很好的搜索内容
最后我这样做了:
import org.apache.commons.collections.map.HashedMap;
import com.google.common.collect.Lists;
(...)
@Autowired
private EventRepository eventRepository; //@Repository extends GraphRepository<Event>
(...)
public List<Event> findByDynamicParam(HashedMap params) {
String query = "match (event)-[:user]-(user), (event)-[:action]-(action)";
if (!params.isEmpty()) {
query += " where";
}
if (params.containsKey("actionId")) {
query += " id(action) = {actionId} and";
}
if (params.containsKey("userId")) {
query += " id(user) = {userId} and";
}
if (!params.isEmpty()) {
query = query.substring(0, query.length() - 4);
}
query += " return (event)";
return Lists.newArrayList(eventRepository.query(query, params));
}
客户的来电者:
HashedMap params = new HashedMap();
if (actionId != null) {
params.put("actionId", actionId);
}
if (userId != null) {
params.put("actionId", userId);
}
List<Event> events = eventService.findByDynamicParam(params);
你怎么看?是否可以优化此功能?
此致
来自巴黎的Olivier