Ich habe ein Maven-Projekt mit spring-data-neo4j erstellt. Ich habe auch die eigenständige Neo4j Server Community Edition 2.3.3 installiert. Ich versuche, einige Vertex-Objekte in der Datenbank zu speichern und sie dann einfach abzurufen, um zu überprüfen, ob alles ordnungsgemäß funktioniert. Dann möchte ich in der Lage sein, die erstellte Datenbank im Standalone-Server zur besseren Visualisierung zu öffnen. Ich verwende als Abhängigkeiten:Daten werden nicht gespeichert, wenn der Neo4j Server mit Spring Data Neo4j verwendet wird
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Die Konfigurationsklasse ist:
@Configuration
@ComponentScan("neo4j.example")
@EnableAutoConfiguration
@EnableNeo4jRepositories("neo4j.example.repository")
public class App extends Neo4jConfiguration {
public App() {
System.setProperty("username", "neo4j");
System.setProperty("password", "root");
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("neo4j.example.model");
}
@Override
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
@Override
public Neo4jServer neo4jServer() {
return new RemoteServer("http://localhost:7474");
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Mein NodeEntity wie folgt aussieht:
@NodeEntity
public class Vertex {
private String name;
@GraphId
private Long id;
@Relationship(type = "PAIRS_WITH", direction = "UNDIRECTED")
public Set<Vertex> teammates;
public Vertex() { }
// getters, setters, equals, toString
}
Das Repository:
@Repository
public interface VertexRepository extends GraphRepository<Vertex> {
Vertex findByName(String name);
List<Vertex> findByTeammatesName(String name);
}
Der Service :
Dann habe ich einen Controller mit zwei einfachen Methoden, um einen Eckpunkt zu speichern und dann die Datenbank abzufragen.
@RestController
@RequestMapping("/api/")
public class GraphController {
@Autowired
VertexService vertexService;
@RequestMapping(value = "addvertex", method = RequestMethod.GET)
public void add() {
Vertex v = new Vertex();
v.setId(1l);
v.setName("name");
Vertex v2 = new Vertex();
v2.setId(2l);
v.worksWith(v2);
vertexService.create(v);
}
@RequestMapping(value = "all", method = RequestMethod.GET)
public Iterable<Vertex> getAll() {
return vertexService.findAll();
}
}
Wenn ich den Vertex in die db speichern, gibt es keinen Fehler. Wenn ich rufe, ist/db leer. Ich habe messages.log und es gibt keine Ausnahme ... letzte Zeilen zu sein:
2016-03-26 14:25:15.716+0000 INFO [o.n.k.i.DiagnosticsManager] Interface Microsoft Wi-Fi Direct Virtual Adapter-WFP 802.3 MAC Layer LightWeight Filter-0000:
2016-03-26 14:25:15.716+0000 INFO [o.n.k.i.DiagnosticsManager] --- INITIALIZED diagnostics END ---
2016-03-26 14:25:15.747+0000 INFO [o.n.k.i.DiagnosticsManager] --- STOPPING diagnostics START ---
2016-03-26 14:25:15.747+0000 INFO [o.n.k.i.DiagnosticsManager] --- STOPPING diagnostics END ---
2016-03-26 14:25:15.747+0000 INFO [o.n.k.i.f.GraphDatabaseFacade] Shutdown started
Jede Hilfe ist voll zu schätzen!
Die eingebettete Datenbank verwendet nicht denselben Speicherort wie der Server. Das Passwort für den Server ist root und der Benutzer ist neo4j wie ich in der Config-Klasse App angegeben habe. Ich habe den eingebetteten db-Teil auskommentiert. Aber ich habe das gleiche Verhalten. Es werden keine Daten in die Datenbank geschrieben. Muss ich irgendwie im Code den Namen und den Ort des Verzeichnisses angeben, das der Server benutzt? Oder ist es genug, um es auf localhost: 7474 zeigen und den Server gestartet haben, wenn ich versuche, es zu schreiben, wie ich es jetzt habe? –