2017-01-04 3 views
0

봄 데이터 Neo4j에 일대 다 관계를 기반으로 쿼리하는 방법으로 일대 다 관계 : 나는의 정확한 세트를 기반으로 모든 개체를 조회 할나는 간단한 정의

@Relationship(type = "BELONG") 
private Set<Category> categories; 

Category. 즉 다음과 같이 구현하십시오 :

Page<SomeObject> findAllByCategories(Set<Category> categories, PageRequest page); 

스프링 데이터 Neo4j에서 가장 좋은 방법은 무엇입니까?

답변

0

당신이 할 수있는 방법에 대한 몇 가지 옵션이 있습니다.

귀하의 호출 코드는 단순히 당신의 SomeObjectRepository에서 다음 호출 할 수 있습니다 :

Iterable<Long> ids = categories.stream().map(SomeObject::getId).collect(Collectors.toSet()); 
Iterable<SomeObject> someObjects = someObjectRepository.findAll(ids, 1); 

참고이 방법은 그러나 페이징을 지원하지 않습니다.

@Autowired 
private Session session; 

... 

// Option 1: write some cypher 
Map<String, Object> params = new HashMap<>(): 
params.put("ids", ids) // use a stream like above to collect the ids. 
Iterable<SomeObject> someObjects = session.query(SomeObject.class, "MATCH (n:SomeObject) ...", params); 

//Option 2: use the load by instances method which also allows pagination: 
Collection<SomeObject> someObjects = session.loadAll(categories, new Pagination(0, 25)); 

나의 추천 옵션이 될 것이다 :

또 다른 방법은 호출 코드에 Session를 주입하고 중 원하는 객체를 검색하거나 모든 인스턴스 방법으로 부하를 사용하는 사용자 정의 사이퍼 쿼리를 작성하는 것입니다 그것은 당신이 원하는 것을 정확히 수행합니다.

+0

SomeObject와 Category는 "BELONG"관계로 연결된 다른 엔티티입니다. – icer

+0

오 ~ 알았어. 이 경우 유일한 옵션은 세션을 삽입하고 옵션 1을 수행하는 것입니다. OGM'Pagination' 객체를 사용하여 페이지를 반환 할 수도 있습니다. – digx1