http://www.neo4j.org/develop/tools/jdbc
Neo4j JDBC Driver can connect with in memory, remote and embedded instance of Neo4j. It is also the suggested approach from the Neo4j team.
Tihs will require to change the dialect so that it will execute only Neo4j queries.
One limitation of this approach is that Cypher does not have a function to get all the properties on a node or a relationship. There is already an issue about this: https://trello.com/c/FciCdgWl
We can also have problems acquiring locks (for sequences), it should be possible to do this by removing a property that does not exist an a node: http://grokbase.com/t/gg/neo4j/138t1pc61j/serializing-read-access-to-a-node-using-cypher-over-rest For example:
MATCH (o:Foo)
WHERE o.name = 'parent'
REMOVE o.`__lock`
CREATE (o)-[:HAS]->(c:Child {name: 'child1', friendlyId: o.nextChildId})
SET o.nextChildId = o.nextChildId + 1
|