# neo4j-ogm
**Repository Path**: mirrors_neo4j/neo4j-ogm
## Basic Information
- **Project Name**: neo4j-ogm
- **Description**: Java Object-Graph Mapping Library for Neo4j
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-19
- **Last Updated**: 2025-06-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
:version: 4.0.18
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
[source,xml,subs="verbatim,attributes"]
----
org.neo4j
neo4j-ogm-core
{version}
org.neo4j
neo4j-ogm-bolt-driver
{version}
----
==== Gradle
[source,xml,subs="verbatim,attributes"]
----
dependencies {
compile 'org.neo4j:neo4j-ogm-core:{version}'
compile 'org.neo4j:neo4j-ogm-bolt-driver:{version}'
}
----
=== Set up domain entities
[source,java]
----
@NodeEntity
public class Actor {
@Id @GeneratedValue
private Long id;
private String name;
@Relationship(type = "ACTS_IN", direction = Relationship.OUTGOING)
private Set 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
[source,java]
----
//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());
}
----
== Integrations within other frameworks
We do offer two offical integrations:
* The https://github.com/neo4j/neo4j-ogm-quarkus[Neo4j-OGM Quarkus Extension], which works nicely with Quarkus' "do everything and then some" at buildtime-approach
* The https://github.com/neo4j/neo4j-ogm-spring[Neo4j-OGM Spring Data fork], which provides continued support for Spring Data Neo4j 5, but for modern Spring versions
== 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.