2016-03-26 10 views
2

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!

Antwort

2

VERWENDET ich mein Problem zu lösen geführt. Die Konfiguration ist in Ordnung, das Problem war, ich habe versucht, die ID-Eigenschaft eines @ NodeEntity-Objekts zu setzen. Selbst wenn ich die @GraphId-Eigenschaft entferne, wird der Scheitelpunkt nicht gespeichert. This post adressiert das gleiche Problem.
In Good Relations:The Spring Data Neo4j Guide Book es wird erwähnt, dass: "Wenn das Feld einfach ID benannt wird, dann ist es nicht notwendig, es mit @GraphId zu kommentieren, da das OGM es automatisch verwenden wird."

Es wäre nett, wenn es irgendeine Art von Warnung/Fehlermeldung oder explizit in der Dokumentation erwähnt, dass Sie nicht SetId() und dass der Knoten wird nicht in der Datenbank gespeichert werden, wenn Sie dies tun. Hoffe, das wird jemandem Zeit sparen!

2

Sie mischen Embedded und Remote-Server?

Sie sollten auf dem Remote-Server nach Ihren Daten suchen.

Auch Sie müssen Auth deaktiviert haben, damit dies auf dem Server funktioniert, oder Sie müssen Benutzernamen (neo4j) und ein Passwort für Ihre Konfiguration angeben.

kein eingebettetes Datenbank auf dem gleichen Verzeichnis START als Server

+0

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? –

Verwandte Themen