try (Transaction tx = graphDb.beginTx())
{
boolean result = checkIfKnowsEdgeExists(startNode, endNode));

if (!result) {
    makeKnowsEdge(startNode, endNode);
    tx.success();
}

should do it. you can't deadlock against yourself if you only create one
transaction ;)

 - Lasse



On Thu, Jul 3, 2014 at 1:09 PM, Frandro <[email protected]> wrote:

> the parameters are a start node and end node.
>
> I'd like to check there's an edge named 'KNOWS' between them and connect
> them with the edge.
>
> It's written in my java code as follows.
> Transaction tx = graphDb.beginTx();
> boolean result = checkIfKnowsEdgeExists(startNode, endNode));
> tx.success();
> tx.close();
>
> if (!result) {
>     Transaction tx = graphDb.beginTx();
>     makeKnowsEdge(startNode, endNode);
>     tx.success();
>     tx.close();
> }
>
> The problem of the code above is it can be performed in 2 transactions.
> I'd like to perform it in one transaction for performance, which creates
> an edge when there's no such an edge.
> Is there any better way to solve it? Cypher does not matter.
>
> The following code throws a deadlock related exception.
> Transaction tx = graphDb.beginTx();
>
> boolean result = checkIfKnowsEdgeExists(startNode, endNode));
>
> if (!result) {
>     Transaction tx = graphDb.beginTx();
>     makeKnowsEdge(startNode, endNode);
>     tx.success();
>     tx.close();
> }
>
>
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Neo4j" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to