spring data neo4j crud - 许多可选的param?

时间:2015-03-20 12:10:47

标签: spring neo4j crud

我将Spring-data-neo4jCrudRepository

一起使用
@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);

但如果一个或所有参数为空,则无效。

2 个答案:

答案 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