2016-04-12 6 views
0

das ist meine KonfigurationNeo4j SDN 4 kann nicht

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

und dies ist meine Domain Benutzer

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

und meine Service-Schnittstelle

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

und

meine Implementierung speichern
@Service 
@Transactional 
public class UserServiceImpl implements UserService{ 

    @Autowired 
    Neo4jOperations template; 

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

und das ist mein Hauptklasse

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

kein Fehler gefunden wurde, aber wenn ich zu neo4j Konsole (localhost: 7474), und diese Abfrage Spiel laufen (n) return n, die alle Knoten zurückgeben soll in der Datenbank. Leider wurden keine Knoten gefunden, obwohl ich fehlerfrei speichern konnte. Ich wundere mich, was falsch ist.

Ich versuchte es auch mit @enablingNeo4jRepositories ohne Unterschied zum Ergebnis.

Antwort

4

Ihr Code sollte nie den Wert des @GraphId Felds festlegen. Dieses Feld wird intern verwendet, um Entitäten an das Diagramm anzuhängen.

Wenn Sie user.setId(i); entfernen, sollten Ihre Entitäten korrekt gespeichert werden.

Beachten Sie, dass Sie Ihr eigenes benutzerdefiniertes ID-Feld hinzufügen können, aber Sie benötigen noch ein anderes Feld für die GraphID, z.

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

Vielen Dank !! das hat es gelöst! – kenlz