Java Object-Graph Mapping Library for Neo4j
Java Shell
Latest commit c27c3fb Feb 22, 2017 @mangrish mangrish Removed username/password from logging. Fixes #330.
- Further clean up to Components/Configuration code.

Neo4j OGM - An Object Graph Mapping Library for Neo4j

Neo4j OGM is a fast object-graph mapping library for Neo4j, optimised for server-based installations utilising Cypher.

It aims to simplify development with the Neo4j graph database and like JPA, it uses annotations on simple POJO domain objects.

If you use Spring to build your applications be sure to check out Spring Data Neo4j.

The latest OGM version is: 2.1.1. The latest OGM development version is: 2.1.2-SNAPSHOT and 3.0.0-SNAPSHOT.

Quick start

Dependencies for Neo4j OGM



<dependency> <!-- If you're using the HTTP driver -->

<dependency> <!-- If you're using the Bolt driver -->

<dependency> <!-- If you're using the Embedded driver -->


dependencies {
    compile 'org.neo4j:neo4j-ogm-core:{version}'
    compile 'org.neo4j:neo4j-ogm-http-driver:{version}'
    compile 'org.neo4j:neo4j-ogm-bolt-driver:{version}'
    compile 'org.neo4j:neo4j-ogm-embedded-driver:{version}'


<dependency org="org.neo4j" name="neo4j-ogm-core" rev="{version}"/>
<dependency org="org.neo4j" name="neo4j-ogm-http-driver" rev="{version}"/>
<dependency org="org.neo4j" name="neo4j-ogm-bolt-driver" rev="{version}"/>
<dependency org="org.neo4j" name="neo4j-ogm-embedded-driver" rev="{version}"/>

Set up domain entities

public class Actor {

    private Long id;
    private String name;

    @Relationship(type = "ACTS_IN", direction = "OUTGOING")
    private Set<Movie> movies = new HashSet<>();

    public Actor() {

    public Actor(String name) { = name;

    public void actsIn(Movie movie) {

public class Movie {

    private Long id;
    private String title;
    private int released;

    @Relationship(type = "ACTS_IN", direction = "INCOMING")
    Set<Actor> actors;

    public Movie() {

    public Movie(String title, int year) {
        this.title = title;
        this.released = year;



The OGM can be configured in two ways. The easiest is auto configuration, where must be on the root of the classpath. The other is via Java configuration.

Please see examples here

Persist/Load entities

//Set up the Session
SessionFactory sessionFactory = new SessionFactory("movies.domain");
Session session = sessionFactory.openSession();

Movie movie = new Movie("The Matrix", 1999);

Actor keanu = new Actor("Keanu Reeves");

Actor carrie = new Actor("Carrie-Ann Moss");

//Persist the movie. This persists the actors as well.;

//Load a movie
Movie matrix = session.load(Movie.class, movie.getId());
for(Actor actor : matrix.getActors()) {
    System.out.println("Actor: " + actor.getName());

Getting Help

The reference guide is the best place to get started.

Neo4j-OGM University, the sample application shown in the reference guide is a working example of a Groovy/Ratpack app that uses the Neo4j OGM library (with the Bolt driver). A version that uses the Embedded driver is also available as well as a version that uses the HTTP driver.

Building locally

To use the latest development version, just clone this repository and run mvn clean install


Neo4j-OGM and it's modules are licensed under the Apache License v 2.0.

The only exception is the neo4j-embedded-driver which is GPL v3 due to the direct use of the Neo4j Java API.