2015-03-20 2 views
1

Я использую Spring-data-neo4j с одним CrudRepositoryВесна данных neo4j crud - много необязательных параметров?

@Repository 
public interface PersonRepository extends GraphRepository<Person> {} 

Я форму Html с 3 входами FirstName, имя, возраст, так что я возможным несколько критериев выбора: All, FirstName, FirstName + Name, FirstName + Age etc....

Я хотел бы сделать " несколько критериев находят "с Картой или другими вещами. Является ли это возможным?

Я стараюсь это в моем CRUD:

List<Person> findByFirstnameAndNameAndAge(String firstname, String name, int age); 

, но это не будет работать, если один или все параметры равно нулю.

ответ

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); 
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); 

Что вы думаете? Можно ли оптимизировать эту функцию?

С уважением

Оливье из Парижа

Смежные вопросы