Java 现在您是否在Neo4j 2.0中创建事务?
现在您是否在Neo4j 2.0中创建事务?我尝试了几十种方法,但都没有成功 基本上,问题是第二次和后续交易永远不会成功。也许我没有正确地开始交易。我不知道。我尝试了在您的单元测试和Java 现在您是否在Neo4j 2.0中创建事务?,java,scala,transactions,neo4j,Java,Scala,Transactions,Neo4j,现在您是否在Neo4j 2.0中创建事务?我尝试了几十种方法,但都没有成功 基本上,问题是第二次和后续交易永远不会成功。也许我没有正确地开始交易。我不知道。我尝试了在您的单元测试和ExecutionEngine中看到的所有可能的组合 以下是我创建事务的方式: private def withTransaction[T](f: => T): T = { // FIXME: Sometimes it returns PlaceboTransaction which causes T
ExecutionEngine
中看到的所有可能的组合
以下是我创建事务的方式:
private def withTransaction[T](f: => T): T = {
// FIXME: Sometimes it returns PlaceboTransaction which causes TONS of issues
val tx = db.beginTx
try {
val result = f
tx.success()
result
} catch {
case e: Throwable =>
// If I don't check this I'll get NullPointerException in TopLevelTransaction.markAsRollbackOnly()
if (!tx.isInstanceOf[PlaceboTransaction])
tx.failure()
throw e
} finally {
// If I don't check this I'll get NullPointerException in TopLevelTransaction.markAsRollbackOnly()
if (!tx.isInstanceOf[PlaceboTransaction])
tx.close()
}
}
它永远不起作用。尝试获取节点的任何数据/属性会导致以下异常
Exception in thread "main" org.neo4j.graphdb.NotInTransactionException
at org.neo4j.kernel.ThreadToStatementContextBridge.transaction(ThreadToStatementContextBridge.java:58)
at org.neo4j.kernel.ThreadToStatementContextBridge.statement(ThreadToStatementContextBridge.java:49)
at org.neo4j.kernel.impl.core.NodeProxy.hasLabel(NodeProxy.java:551)
at GraphDBManager$$anonfun$findUsers$1$$anonfun$apply$1.apply(GraphDBManager.scala:72)
at GraphDBManager$$anonfun$findUsers$1$$anonfun$apply$1.apply(GraphDBManager.scala:72)
at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:722)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:721)
at GraphDBManager$$anonfun$findUsers$1.apply(GraphDBManager.scala:72)
at GraphDBManager$$anonfun$findUsers$1.apply(GraphDBManager.scala:72)
at GraphDBManager$.withTransaction(GraphDBManager.scala:38)
at GraphDBManager$.findUsers(GraphDBManager.scala:71)
at Test$.main(Test.scala:12)
at Test.main(Test.scala)
我创建了示例项目
非常感谢您的帮助。谢谢。好的。。经过几个小时的调试,我终于明白了。我希望它能在最终版本中得到修复 下面是问题函数的样子
def findUsers: List[ObjectId] = {
val query = engine.execute(s"MATCH (n:$label) RETURN n")
val it = query.columnAs[Node]("n")
withTransaction {
val lst = it.toList
val ret = for (node <- lst; if node.hasLabel(label)) yield new ObjectId(node.getProperty("id").asInstanceOf[String])
ret
}
}
它来自哪里
private KernelTransaction transaction()
{
checkIfShutdown();
KernelTransaction transaction = txManager.getKernelTransaction();
if ( transaction == null )
{
throw new NotInTransactionException();
}
return transaction;
}
来自getKernelTransaction
的事务和来自TLS映射的对象之间有什么区别我不知道
因此,我的函数的固定版本将是
def findUsers: List[ObjectId] = {
val query = engine.execute(s"MATCH (n:$label) RETURN n")
val it = query.columnAs[Node]("n")
val lst = it.toList
query.close()
withTransaction {
val ret = for (node <- lst; if node.hasLabel(label)) yield new ObjectId(node.getProperty("id").asInstanceOf[String])
ret
}
}
def findUsers:List[ObjectId]={
val query=engine.execute(s“匹配(n:$label)返回n”)
val it=query.columnAs[Node](“n”)
val lst=it.toList
query.close()
withTransaction{
val ret=for(nodeWell..经过几个小时的调试,我找到了它。我希望它能在最终版本中得到修复
下面是问题函数的样子
def findUsers: List[ObjectId] = {
val query = engine.execute(s"MATCH (n:$label) RETURN n")
val it = query.columnAs[Node]("n")
withTransaction {
val lst = it.toList
val ret = for (node <- lst; if node.hasLabel(label)) yield new ObjectId(node.getProperty("id").asInstanceOf[String])
ret
}
}
它来自哪里
private KernelTransaction transaction()
{
checkIfShutdown();
KernelTransaction transaction = txManager.getKernelTransaction();
if ( transaction == null )
{
throw new NotInTransactionException();
}
return transaction;
}
来自getKernelTransaction
的事务和来自TLS映射的对象之间有什么区别我不知道
因此,我的函数的固定版本将是
def findUsers: List[ObjectId] = {
val query = engine.execute(s"MATCH (n:$label) RETURN n")
val it = query.columnAs[Node]("n")
val lst = it.toList
query.close()
withTransaction {
val ret = for (node <- lst; if node.hasLabel(label)) yield new ObjectId(node.getProperty("id").asInstanceOf[String])
ret
}
}
def findUsers:List[ObjectId]={
val query=engine.execute(s“匹配(n:$label)返回n”)
val it=query.columnAs[Node](“n”)
val lst=it.toList
query.close()
withTransaction{
val ret=用于(node这是一个客户端代码错误,这里是对有问题的项目的请求:这是一个客户端代码错误,这里是对有问题的项目的请求:谢谢你,Peter。不过我有一个问题。从架构设计的角度来看,在执行中抛出NotInTransaction
异常不是更为一致Engine.execute
而不是在其内部创建事务?谢谢你,Peter。不过我有一个问题。从架构设计的角度来看,在ExecutionEngine.execute
中抛出NotInTransaction
异常而不是在其内部创建事务不是更为一致吗?