2013-02-06 8 views

Odpowiedz

4

można spróbować

public Node getOrCreateUserWithUniqueFactory(final String firstName, final String lastname, GraphDatabaseService graphDb) { 
    UniqueFactory<Node> factory = new UniqueFactory.UniqueNodeFactory(graphDb, "users") { 
     @Override 
     protected void initialize(Node created, Map<String, Object> properties) { 
     created.setProperty("id", properties.get("id")); 

     created.setProperty("firstName", firstName); 
     created.setProperty("lastName", lastname); 
     } 
    }; 

    return factory.getOrCreate("id", firstName + "_" + lastname); 
    } 
+0

Thanks Werner! Zamierzam użyć tego w mojej implementacji, chyba że znajdę jeszcze lepszy sposób. Wielkie dzięki! – Amresh

+0

Po prostu pamiętaj, że nie tworzy to klucza złożonego w tym sensie, że masz 2 oddzielne klucze, które możesz wyszukać, to jest utworzenie jednego klucza, który jest kombinacją dwóch kluczy, które wcześniej chciałeś. Unikatowa fabryka obecnie nie zapewnia sposobu tworzenia unikatowych węzłów z kluczami złożonymi. – Nicholas

+0

Dzięki Nicholas! FirstName, lastName (i inne pola tworzące klucz złożony) pochodzą z odbicia za pomocą metod Class.getDeclaredFields(), aby pobrać pola, a następnie za pomocą pola do pobrania wartości pola. Ponieważ obsługa pól nie jest gwarantowana przez Javę, wydaje mi się to nieco kłopotliwe. – Amresh