2013-02-06 25 views
7

Tôi cần đảm bảo rằng kết hợp nhiều hơn một giá trị thuộc tính trong tất cả các nút là duy nhất. Làm thế nào để làm điều đó trong Neo4J.Cách triển khai các phím tổng hợp trong Neo4J

Từ tài liệu Neo4J có sẵn tại http://docs.neo4j.org/chunked/milestone/transactions-unique-nodes.html, có thể đảm bảo tính duy nhất của một thuộc tính. Nhưng những gì về sự kết hợp của 2 hoặc nhiều hơn.

Trả lời

4

Bạn có thể thử

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

Cảm ơn Werner! Tôi sẽ sử dụng điều này trong việc thực hiện của tôi, trừ khi tôi tìm thấy một số cách tốt hơn. Cảm ơn nhiều! – Amresh

+0

Chỉ cần cẩn thận rằng điều này không phải là tạo ra một chìa khóa tổng hợp theo nghĩa là bạn có 2 phím riêng biệt mà bạn có thể tra cứu, đây là việc tạo ra một chìa khóa là sự kết hợp của hai phím bạn muốn trước đó. Nhà máy độc đáo hiện không cung cấp cách tạo các nút duy nhất bằng các phím tổng hợp. – Nicholas

+0

Cảm ơn Nicholas! FirstName, lastName (và các trường khác tạo thành khóa tổng hợp) đến từ sự phản chiếu bằng cách sử dụng các phương thức Class.getDeclaredFields() để lấy lại các trường và sau đó sử dụng trường để lấy giá trị trường. Vì trật tự của trường không phải là sự bảo đảm bởi Java, điều này có vẻ hơi phức tạp đối với tôi. – Amresh