2017-01-04 2 views
0

春データのNeo4jに1対多の関係に基づいて照会する方法として、1対多の関係:私はの正確なセットに基づいて、すべてのオブジェクトを照会する私は単純に定義されている

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

Category。つまり、次のようなものを実装してください:

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

Spring Data Neo4jで行う最良の方法は何ですか?

答えて

0

これを行う方法にはいくつかのオプションがあります。この方法はしかし、ページングをサポートしていません

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

注:

あなたの呼び出し元のコードは、単にあなたのSomeObjectRepositoryで次のように呼び出すことができます。

もう一つの方法は、あなたの呼び出し元のコードにSessionを注入し、どちらかの希望のオブジェクトを取得するか、すべてのインスタンスメソッドでロードを使用するカスタムサイファークエリを記述することです:

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

私の推薦は、オプション2となりますそれはあなたが望むものとほとんど同じです。

+0

SomeObjectとカテゴリは、「BELONG」関係でリンクされている別のエンティティです。 – icer

+0

ああそうです。その場合、セッションを挿入してオプション1を実行するだけです。OGMの 'Pagination'オブジェクトを使ってページを返すこともできます。 – digx1

関連する問題