他の誰かがこれに対して良いまたはより良い答えを見つけたことがあるのかどうかはわかりませんが、ここで私が働いていたものがあります。私は春のブートプロジェクトを実行している、私はいくつかの最も適切なコードと例をこの答えに投稿しますが、全体のRESTサービスプロジェクトを確認するにはhttps://github.com/jrspriggs/Chronicler
だから、小さなアプリの目的atmはストーリーに参加するキャラクター/ビーイングを作成し、ストーリー(タイトルとスラッグラインを特徴とする)を作成し、その関係に付けられたストーリーの視点からストーリーとストーリーの関係を作ります。この方法で、各キャラクターからさまざまなバージョンのストーリーを収集します。
neo4jインスタンスは、WindowsラップトップのDocker/Kitematicの基本的なneo4jインスタンスです。ここでのモデルは以下のとおりです。
Being.java:
package com.chronicler.model;
import java.util.Iterator;
import java.util.Set;
import org.springframework.data.neo4j.annotation.Fetch;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.annotation.RelatedTo;
import org.springframework.data.neo4j.annotation.RelatedToVia;
@NodeEntity
public class Being {
public Long getId() {
return id;
}
@GraphId private Long id;
private String firstName;
private String lastName;
private boolean hero;
private boolean villain;
@RelatedToVia(type="TOOK_PART_IN")
@Fetch private Set<Involvement> involvements;
public Set<Involvement> getInvolvements() {
return involvements;
}
public void setInvolvements(Set<Involvement> involvements) {
this.involvements = involvements;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public boolean isHero() {
return hero;
}
public void setHero(boolean hero) {
this.hero = hero;
}
public boolean isVillain() {
return villain;
}
public void setVillain(boolean villain) {
this.villain = villain;
}
}
Story.java
package com.chronicler.model;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.NodeEntity;
@NodeEntity
public class Story {
public Long getId() {
return id;
}
@GraphId private Long id;
private String title;
private String slug;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
}
Involvement.java(話をされて間の関係)
package com.chronicler.model;
import org.springframework.data.neo4j.annotation.EndNode;
import org.springframework.data.neo4j.annotation.Fetch;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.RelationshipEntity;
import org.springframework.data.neo4j.annotation.StartNode;
@RelationshipEntity(type="TOOK_PART_IN")
public class Involvement {
@GraphId private Long relationshipId;
@Fetch @StartNode private Being being;
@Fetch @EndNode private Story story;
private String perspective;
public Long getRelationshipId() {
return relationshipId;
}
public void setRelationshipId(Long relationshipId) {
this.relationshipId = relationshipId;
}
public Being getBeing() {
return being;
}
public void setBeing(Being being) {
this.being = being;
}
public Story getStory() {
return story;
}
public void setStory(Story story) {
this.story = story;
}
public String getPerspective() {
return perspective;
}
public void setPerspective(String perspective) {
this.perspective = perspective;
}
}
そこから私は基本的に春のデータサービスのために設定された基本的なリポジトリレストリソースクラスを持っています。彼らはエンティティを世話しますが、実際には私の関係には言及していません。そこから
package com.chronicler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.chronicler.model.Involvement;
import com.chronicler.repo.InvolvementRepository;
@RestController
public class BeingController {
@Autowired
InvolvementRepository involvementRepository;
@RequestMapping(value="/beingStory", method=RequestMethod.POST)
public Involvement createBeingStoryRelationship(@RequestBody Involvement involvement) {
involvementRepository.save(involvement);
return involvement;
}
}
、ちょうどlocalhostに投稿:正確な関係を作成するJSON本体の以下のようなもので3000/beingStoryを何をしてそれを保存するために別々の残りのルートを実装するために
BeingController.javaです:
{
"character": {
"id": 17,
"firstName": "Dr. Victor",
"lastName": "Frankenstein",
"hero": true,
"villain": true
},
"story": {
"id": 15,
"title": "Frankenstein",
"slug": "A doctor plays god"
},
"relationshipId": 10,
"perspective": "I did a monstrous thing. I wanted to create life, but I created horrors... such unimaginable horrors, such that mankind has not ever imagined."
}
その時点から、人間とストーリーの関係を歩くことができます。このサンプルアプリケーションを使って、選択したストーリーからキャラクターの関与を確認するための逆の関係を実装するには、もう少し追加しなければならないでしょう。文字間にリレーションシップを追加しようと考えています。
Spring Data Neo4jとの関係の作成/変更に関するドキュメントをお探しの場合は、http://docs.spring.io/spring-data/neo4j/docs/current/reference/html/をご覧ください。 – Luanne