Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 现在您是否在Neo4j 2.0中创建事务?_Java_Scala_Transactions_Neo4j - Fatal编程技术网

Java 现在您是否在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

现在您是否在Neo4j 2.0中创建事务?我尝试了几十种方法,但都没有成功

基本上,问题是第二次和后续交易永远不会成功。也许我没有正确地开始交易。我不知道。我尝试了在您的单元测试和
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
异常而不是在其内部创建事务不是更为一致吗?