Skip to content
Java Object-Graph Mapping Library for Neo4j
Java CSS JavaScript Kotlin HTML sed
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add link to bug templates project in Github issue template. May 19, 2017
.mvn/wrapper Update Maven Wrapper to use Maven 3.6.1. Aug 21, 2019
api GH-744 - Make database configurable. Jan 14, 2020
bolt-driver GH-744 - Make database configurable. Jan 14, 2020
bolt-native-types GH-730 - Update license header. Jan 6, 2020
checkstyle GH-730 - Update license header. Jan 6, 2020
core GH-748 - Fix return type for known entity classes. Jan 23, 2020
embedded-driver GH-728 - Improve class loading mechanism. Jan 8, 2020
embedded-native-types GH-730 - Update license header. Jan 6, 2020
http-driver GH-730 - Update license header. Jan 6, 2020
neo4j-ogm-docs GH-730 - Update license header. Jan 6, 2020
neo4j-ogm-tests GH-748 - Fix return type for known entity classes. Jan 23, 2020
.editorconfig Make .editorconfig more detailed. Nov 27, 2019
.gitignore Add decoupled docs build (#387) Aug 1, 2017
.travis.yml Configure --no-transfer-progress for Travis build. Aug 21, 2019
CHANGES.adoc Prepare version 3.2.7. Jan 23, 2020
Copyright-Header.txt GH-730 - Update license header. Jan 6, 2020
LICENSE.txt Added explicit Apache 2.0 license Mar 25, 2016
Neo4jOGM-Formatter.xml Re-format the whole project. (#442) Dec 1, 2017
README.adoc Prepare version 3.2.7. Jan 23, 2020
mvnw Update Maven Wrapper to use Maven 3.6.1. Aug 21, 2019
mvnw.cmd Update Maven Wrapper to use Maven 3.6.1. Aug 21, 2019
pom.xml GH-728 - Improve class loading mechanism. Jan 8, 2020

README.adoc

Maven Central Slack stackoverflow

Neo4j-OGM - An Object Graph Mapping Library for Neo4j

Note
This is the development branch of Neo4j-OGM. Please have a look at the current supported versions and which combinations we recommend: Recommended versions.

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.

Quick start

You can start coding with some simple templates, or just follow the little guide below!

Dependencies for Neo4j-OGM

Maven

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-core</artifactId>
    <version>3.2.7</version>
</dependency>

<dependency> <!-- If you're using the HTTP driver -->
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-http-driver</artifactId>
    <version>3.2.7</version>
</dependency>

<dependency> <!-- If you're using the Bolt driver -->
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-bolt-driver</artifactId>
    <version>3.2.7</version>
</dependency>

<dependency> <!-- If you're using the Embedded driver -->
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-embedded-driver</artifactId>
    <version>3.2.7</version>
</dependency>

Gradle

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

Ivy

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

Set up domain entities

@NodeEntity
public class Actor {

	@Id @GeneratedValue
	private Long id;
	private String name;

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

	public Actor() {
	}

	public Actor(String name) {
		this.name = name;
	}

	public void actsIn(Movie movie) {
		movies.add(movie);
		movie.getActors().add(this);
	}
}

@NodeEntity
public class Movie {

	@Id @GeneratedValue
	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;
	}

}

Configuration

The either configure OGM with properties files, or programmatically.

Please see examples here.

Persist/Load entities

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

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

Actor keanu = new Actor("Keanu Reeves");
keanu.actsIn(movie);

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

//Persist the movie. This persists the actors as well.
session.save(movie);

//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.

Feel free to chat with us on the Neo4j-OGM Slack channel, and have a look to some examples like Neo4j-OGM University.

You can also post questions in our community forums or on StackOverflow.

Building locally

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

The tests default to Bolt. If you want to change this, you have to define the property ogm.properties when calling Maven. e.g. ./mvnw clean verify -Dogm.properties=ogm-http.properties to use the HTTP transport. Possible values are ogm-bolt.properties, ogm-http.properties and ogm-embedded.properties.

For tests we are using TestContainers. The default image right now is neo4j:3.5.12. If you want to use other images or the enterprise edition, you have to opt-in.

Here is a list of the possible environment variables you can provide.

Variable Description Default value

NEO4J_OGM_NEO4J_ACCEPT_AND_USE_COMMERCIAL_EDITION

Use enterprise edition and accept the Neo4j licence agreement.

no

NEO4J_OGM_NEO4J_IMAGE_NAME

Image to be used by TestContainers.

neo4j:3.5.12

If you are using embedded-based tests, the TestContainers values are ignored. To switch between various Neo4j versions for embedded, you have to select the right profile. neo4j-3.2 - neo4j-3.5 and neo4j-enterprise or neo4j-3.5-enterprise if you want to test against the enterprise versions.

YourKit profiler

We would like to thank YourKit for providing us a license for their product, which helps us to make OGM better.

yourkit

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

License

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.

You can’t perform that action at this time.