2016-03-26 2 views
2

Я создал проект Maven с использованием spring-data-neo4j. Я также установил автономное Neo4j Server Community Edition 2.3.3. Я пытаюсь сохранить некоторые объекты Vertex в базе данных, а затем просто получить их, чтобы проверить, что все работает нормально. Затем я хотел бы иметь возможность открыть созданный db на автономном сервере для лучшей визуализации. Я использую в качестве зависимостей:Данные не сохраняются при использовании удаленного сервера Neo4j с данными Spring Neo4j

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

Класс конфигурации:

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


    } 

Мой NodeEntity выглядит следующим образом:

@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 
    } 

хранилища:

@Repository 
public interface VertexRepository extends GraphRepository<Vertex> { 

    Vertex findByName(String name); 

    List<Vertex> findByTeammatesName(String name); 
} 

Службы :

@Service 
public class VertexServiceImpl implements VertexService { 

    @Autowired 
    private VertexRepository vertexRepository; 

    @Override 
    @Transactional 
    public Vertex create(Vertex vertex) { 
     return vertexRepository.save(vertex); 
    } 

    @Override 
    @Transactional 
    public Iterable<Vertex> findAll() { 
     return vertexRepository.findAll(); 
    } 
//.... 
} 

Тогда у меня есть контроллер с двумя простыми методами, чтобы сохранить вершину, а затем запросить базу данных.

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

} 

Когда я сохраняю вершину в db, ошибки не возникает. Когда я вызываю/все db пуст. Я проверил messages.log и не было никаких исключений ... последние строки:

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 

Любая помощь в полной мере оценена!

ответ

2

мне удалось решить мою проблему. Конфигурация в порядке, проблема в том, что я пытался установить свойство id объекта @NodeEntity. Даже если я удалю свойство @GraphId, вершина не будет сохранена. This post адресует ту же проблему.
In Good Relations:The Spring Data Neo4j Guide Book упоминается, что: «Если поле просто называется« id », тогда нет необходимости комментировать его с помощью @GraphId, поскольку OGM будет использовать его автоматически».

Было бы неплохо, если бы было какое-то предупреждение/сообщение об ошибке или более явно указано в документации, которую вы не можете установитьId() и что узел не будет сохранен в db, если вы это сделаете. Надеюсь, это спасет кого-нибудь!

2

Вы смешиваете встроенный и удаленный сервер?

Вы должны искать свои данные на удаленном сервере.

Также вы должны отключить auth, чтобы это работало на сервере, или вы должны указать имя пользователя (neo4j) и пароль для своей конфигурации.

НЕ НАЧАТЬ внедренный БАЗ НА ОДНОМ КАТАЛОГЕ КАК SERVER ИСПОЛЬЗУЕТ

+0

Вложенная база данных не использует то же место, что и сервер. Пароль для сервера - root, а пользователь - neo4j, как я указал в App приложения конфигурации. Я прокомментировал часть встроенного db. Но у меня такое же поведение. Никакие данные не записываются в db. Должен ли я каким-либо образом указать в коде имя и расположение каталога, который использует сервер? Или достаточно указать его на localhost: 7474 и запустить сервер, когда я попытаюсь написать ему, как у меня сейчас? –

 Смежные вопросы

  • Нет связанных вопросов^_^