2016-04-12 1 views
0

это моя конфигурацияNeo4j SDN 4 Невозможно сохранить

@EnableTransactionManagement 
@EnableScheduling 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"id.co.babe.neo4j.service"}) 
@Configuration 

public class MyNeo4jConfiguration extends Neo4jConfiguration { 
    private static final Logger LOGGER = LoggerFactory.getLogger(MyNeo4jConfiguration.class); 

    @Value("${neo4j.server.user}") 
    private String user; 
    @Value("${neo4j.server.pass}") 
    private String pass; 
    @Value("${neo4j.server.host}") 
    private String host; 

@Override 
public Neo4jServer neo4jServer() { 
    return new RemoteServer(host,user,pass); 
} 

@Override 
public SessionFactory getSessionFactory() { 
    return new SessionFactory("app.neo4j.domain"); 
} 

@Bean 
@Primary 
public Neo4jOperations getNeo4jTemplate() throws Exception { 
    return new Neo4jTemplate(getSession()); 
} 

и это мой домен пользователя

@NodeEntity 
public class User{ 
    @GraphId 
    private Long Id; 
    private String name; 
    private int age; 
    private String country; 

и мой служебный интерфейс

public interface UserService { 
    public User create(User user); 
    public User read(User user); 
    public List<User> readAll(); 
    public User update(User user); 
    public Boolean delete(User user); 
} 

и моя реализация

@Service 
@Transactional 
public class UserServiceImpl implements UserService{ 

    @Autowired 
    Neo4jOperations template; 

    @Override 
    public User create(User user){ 
    return template.save(user); 
    } 

и это мой основной класс

for(int i = 0; i < 10; i++){ 
    app.neo4j.domain.User user = new app.neo4j.domain.User(); 
    user.setAge(13); 
    user.setCountry("Philly"); 
    user.setId(i); 
    user.setName("Ibanez" + i); 
    LOGGER.info("Inserting {}",user.getName()); 
    service.create(user); 
} 

не было обнаружено никаких ошибок, но когда я иду в neo4j консоли (LOCALHOST: 7474), и запустить этот матч запроса (п) возврата п, который должен возвращать все узлы в базе данных. к сожалению, не было найденных узлов, хотя я смог сэкономить без ошибок. Интересно, что случилось.

Я также пробовал сделать это с @enablingNeo4jRepositories без каких-либо отличий от результата.

ответ

4

Ваш код никогда не должен устанавливать значение поля @GraphId. Это поле используется внутри для прикрепления объектов к графику.

Если вы удалите user.setId(i);, ваши объекты должны быть сохранены правильно.

Обратите внимание, что вы можете добавить свое собственное поле идентификатора, но вам по-прежнему нужно другое поле для GraphID, например.

@GraphId private Long graphId; //used internally, never assign a value 
private Long id; //your application id, stored as a property on the entity 
+0

Большое спасибо! что это решило! – kenlz