:version: 4.0.12
image:https://github.com/neo4j/neo4j-ogm/actions/workflows/maven.yml/badge.svg[https://github.com/neo4j/neo4j-ogm/actions/workflows/maven.yml] image:https://img.shields.io/maven-central/v/org.neo4j/neo4j-ogm.svg[Maven Central,link=http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.neo4j%22%20AND%20a%3A%22neo4j-ogm%22] image:https://rawgit.com/aleen42/badges/master/src/stackoverflow.svg[stackoverflow,link=https://stackoverflow.com/questions/tagged/neo4j-ogm]
= Neo4j-OGM - An Object Graph Mapping Library for Neo4j.
Neo4j-OGM is a fast object-graph mapping library for https://neo4j.com/[Neo4j], optimised for server-based installations utilising https://neo4j.com/developer/cypher-query-language/[Cypher].
It aims to simplify development with the Neo4j graph database and like JPA, it uses annotations on simple POJO domain objects.
Please have a look at the current supported versions and which combinations we recommend: https://github.com/neo4j/neo4j-ogm/wiki/Versions[Recommended versions]
== Quick start
=== Dependencies for Neo4j-OGM
==== Maven
==== Gradle
=== Set up domain entities
@NodeEntity public class Actor {
@Id @GeneratedValue
private Long id;
private String name;
@Relationship(type = "ACTS_IN", direction = Relationship.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;
public Movie() {
}
public Movie(String title, int year) {
this.title = title;
this.released = year;
}
}
=== Configuration
The either configure Neo4j-OGM with properties files, or programmatically.
Please see examples http://neo4j.com/docs/ogm-manual/current/reference/#reference:configuration[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);
== Integrations within other frameworks
We do offer two offical integrations:
== Getting Help
The http://neo4j.com/docs/ogm-manual/current/[reference guide] is the best place to get started.
You can also post questions in our https://community.neo4j.com/c/drivers-stacks/spring-data-neo4j-ogm[community forums] or on http://stackoverflow.com/questions/tagged/neo4j-ogm[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-bolt.properties
.
For testing we are using https://www.testcontainers.org/[TestContainers].
The default image right now is neo4j:5
.
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.
[options="header"]
|===
|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:5
|===
== 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.