- All Known Subinterfaces:
QueryRunner
,Session
,Transaction
,TransactionContext
Important notes on semantics
queries run in the same QueryRunner
are guaranteed to execute in order, meaning changes made by one query will be seen by all subsequent queries in
the same QueryRunner
.
However, to allow handling very large results, and to improve performance, result streams are retrieved lazily from the network. This means that when any of
run(Query)
methods return a result, the query has only started executing - it may not have completed yet. Most of the time, you will not notice
this, because the driver automatically waits for queries to complete at specific points to fulfill its contracts.
Specifically, the driver will ensure all outstanding queries are completed whenever you:
- Read from or discard a result, for instance via
Result.next()
orResult.consume()
- Explicitly commit/rollback a transaction using blocking
Transaction.close()
- Close a session using blocking
Session.close()
As noted, most of the time, you will not need to consider this - your writes will
always be durably stored as long as you either use the results, explicitly commit
transactions
or close the session you utilised using Session.close()
.
While these semantics introduce some complexity, it gives the driver the ability to handle infinite result streams (like subscribing to events), significantly lowers the memory overhead for your application and improves performance.
- Since:
- 5.0
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionRun a query and return a result stream.Run a query and return a result stream.Run a query and return a result stream.Run a query and return a result stream.Run a query and return a result stream.
-
Method Details
-
run
Run a query and return a result stream.This method takes a set of parameters that will be injected into the query by Neo4j. Using parameters is highly encouraged, it helps avoid dangerous cypher injection attacks and improves database performance as Neo4j can re-use query plans more often.
This particular method takes a
Value
as its input. This is useful if you want to take a map-like value that you've gotten from a prior result and send it back as parameters.If you are creating parameters programmatically,
run(String, Map)
might be more helpful, it converts your map to aValue
for you.Example
Result result = session.run( "MATCH (n) WHERE n.name = $myNameParam RETURN (n)", Values.parameters( "myNameParam", "Bob" ) );
- Parameters:
query
- text of a Neo4j queryparameters
- input parameters, should be a map Value, seeValues.parameters(Object...)
.- Returns:
- a stream of result values and associated metadata
-
run
Run a query and return a result stream.This method takes a set of parameters that will be injected into the query by Neo4j. Using parameters is highly encouraged, it helps avoid dangerous cypher injection attacks and improves database performance as Neo4j can re-use query plans more often.
This version of run takes a
Map
of parameters. The values in the map must be values that can be converted to Neo4j types. SeeValues.parameters(Object...)
for a list of allowed types.Example
Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("myNameParam", "Bob"); <p> Result result = session.run( "MATCH (n) WHERE n.name = $myNameParam RETURN (n)", parameters );
- Parameters:
query
- text of a Neo4j queryparameters
- input data for the query- Returns:
- a stream of result values and associated metadata
-
run
Run a query and return a result stream.This method takes a set of parameters that will be injected into the query by Neo4j. Using parameters is highly encouraged, it helps avoid dangerous cypher injection attacks and improves database performance as Neo4j can re-use query plans more often.
This version of run takes a
Record
of parameters, which can be useful if you want to use the output of one query as input for another.- Parameters:
query
- text of a Neo4j queryparameters
- input data for the query- Returns:
- a stream of result values and associated metadata
-
run
Run a query and return a result stream.- Parameters:
query
- text of a Neo4j query- Returns:
- a stream of result values and associated metadata
-
run
Run a query and return a result stream.Example
Query query = new Query( "MATCH (n) WHERE n.name = $myNameParam RETURN n.age" ); Result result = session.run( query.withParameters( Values.parameters( "myNameParam", "Bob" ) ) );
- Parameters:
query
- a Neo4j query- Returns:
- a stream of result values and associated metadata
-