Skip to content
Wolfgang Schuetzelhofer edited this page Nov 30, 2019 · 174 revisions


Note: Due to heavy workload on customer projects, I am currently not able to do development work on JCypher.
However, you are highly wellcome to contribute to the project if you have ideas or the need for extensions.
I will continue working on JCypher as soon as my project schedule allows it.

Current Release 4.2.0 download
release tag
Release Notes (since 2.1.0)
Upcoming Release, delayed (sorry):
Not yet known
4.3.0 please see also: Outlook (Roadmap)
JCypher on Maven Central
JCypher Samples Project on GitHub
Next Table of Contents

JCypher provides seamlessly integrated Java access to graph databases (Neo4J) at different levels of abstraction.
Starting top-down:

  • At the topmost level of abstraction, JCypher allows to map complex business domains to graph databases. You can take an arbitrarily complex graph of domain objects (pojos (plain old java objects)) and store it in a straight forward way into a graph database for later retrieval. You do not need to modify your domain object classes in any way. You even do not add annotations. Moreover JCypher provides a default mapping so you don't have to write a single line of mapping code or of mapping configuration.

  • At the same level of abstraction 'Domain Queries' provide the power and expressiveness of queries on a graph database, while being formulated on domain objects or on types of domain objects respectively. The true power of Domain Queries comes from the fact, that the graph of domain objects is backed by a graph database.

  • At the next lower level of abstraction, access to graph databases is provided based on a generic graph model. The model consists of nodes, relations, and paths, together with properties, labels, and types. While simple, the model allows to easily navigate and manipulate graphs.

  • At the bottom level of abstraction, a 'Native Java DSL' in form of a fluent Java API allows to intuitively and comfortably formulate queries against graph databases. The DSL (Domain Specific Language) is based on the CYPHER language. Hence the name JCypher. (The Cypher Language is developed as part of the Neo4J Graph Database by 'Neo Technology'). The DSL provides all the power and expressiveness of the Cypher language.

  • Additionally, JCypher provides database access in a uniform way to remote as well as to embedded databases (including in-memory databases).

JCypher 4.2.0 was adapted for Neo4j 3.5.x and tested against Neo4j 3.5.2.
(Releases 4.1.1, 4.1.0, 4.0.1 and 4.0.0 were developed and tested with Neo4j 3.4.1).
(Release 3.9.0 was developed and tested with Neo4j 3.3.1).
(Release 3.8.0 was developed and tested with Neo4j 3.2.2).
(Release 3.7.0 was developed and tested with Neo4j release 3.1.1, JCypher releases 3.5.0 and 3.6.0 with Neo4j release 3.0.3).
Release 3.4.1 was developed and tested with Neo4j 2.3.2 (support for Neo4j 2.2.x started with release 2.6.0). What you need to consider if you want to access Neo4j databases prior to 2.2.x, you can find in the Getting Started section of this documentation.

Release 4.2.0 features: Access to graph databases in a uniform way; JCypher-Query-DSL; a generic graph model; generic mapping of complex business domains; Domain Queries Part 1 - Predicate Expressions; Domain Queries Part 2 - Traversal Expressions; Domain Queries Part 3 - Collection Expressions; Domain Query Concatenation; Support for Neo4j 2.2.x including basic authentication and authorization; Transaction API; Generic Domain Model; Concurrency Support; JSON Facade; Storing Domain Queries; Parameters with Query DSL Expressions; support for the BOLT protocol; extended Authentication; shutdown hooks made optional; public constructors for IDBAccess implementations allow more customized configurations. You are encouraged but not required to use DBAccessFactory; set the planner strategy globally or individually on a per query basis, Collections in the Query API are aware of their component type.
Please also have a look at Outlook (Roadmap).

There is a distinct project which provides samples for JCypher.

Release Naming Strategy
Format: n1.n2.n3[-Mxx] With n1, n2, n3 integer values such that: n1 ... major release number, n2 ... minor release number, n3 ... fix release number.
n1 changes when new major features are added.
n2 changes when existing features are enhanced or minor features are added.
n3 changes when problem- or bug fixes are added.
[-Mxx] optional milestone release info.

Next Table of Contents