The common domain implementation pattern when using Neo4j is to let the domain objects wrap a node, and store the state of the entity in the node properties. To relieve you from the boilerplate code needed for this, you can use a framework like jo4neo (intro, blog posts), where you use annotations to declare properties and relationships, but still have the full power of the graph database available for deep traversals and other graphy stuff. Here's a code sample showing jo4neo in action:view sourceprint?public class Person { //used by jo4neo transient Nodeid node; //simple property @neo String firstName; //helps you store a java.util.Date to neo4j @neo Date date; // jo4neo will index for you @neo(index=true) String email; // many to many relation @neo Collection<role> roles; /* normal class oriented * programming stuff goes here */}</role>