当前位置: 首页 > 知识库问答 >
问题:

Neo4jClient事务错误

梁福
2023-03-14

当我尝试在不使用事务的情况下更新Neo4JClient中的现有节点时,它对id和Name属性具有唯一约束,我收到以下异常:

节点6已经存在的标签用户和属性"Name"=[Mike]

但当我尝试更新事务中的节点时,会收到以下异常:

执行请求时收到意外的HTTP状态。

响应状态为:404未找到

Neo4j的响应(可能包括有用的细节!)was:{“结果”:[],“错误”:[{“代码”:“Neo.ClientError.Transaction.UnknownId”,“消息”:“无法识别的事务id。事务可能已超时并已回滚。”}]}

我的代码如下:

using (var transaction = client.BeginTransaction())
{
    client.Cypher
        .Merge("(user:User { Id: {id}})")
        .OnCreate().Set("user = {user}")
        .OnMatch().Set("user = {user}")
        .WithParams(new { id = user.Id, user = user })
        .ExecuteWithoutResults();

    transaction.Commit();
}

我的问题是:有没有一种方法可以在使用事务时得到实际的错误,就像我不使用事务时得到一个错误一样?

谢啦

编辑1:

看起来中的空Id没有得到正确处理。向下钻取之后,我设法找出了实际的错误。第一个例外是:

errors = {[
  {
    "code": "Neo.ClientError.Statement.InvalidSemantics",
    "message": "Cannot merge node using null property value for Id"
  }
]}

此异常的堆栈跟踪是:

在Neo4jClient。连载。CypherJsonDeserializer1.GetRootResultInTransaction(JObject根)在[PATH_HIIDEN]\Neo4jClient\序列化\CypherJsonDeserializer.cs:行316在Neo4jClient。连载。CypherJsonDeserializer1.在[PATH_HIIDEN]\Neo4jClient\序列化\CypherJsonDeserializer.cs:行291中检查错误信息(字符串内容)。GraphClient.

然后出现404 NOT Found错误的异常。为此,堆栈跟踪为:

在Neo4jClient。处决HttpResponseMessageExtensions。确保[PATH_HIIDEN]\Neo4jClient\Execution\HttpResponseMessageExtensions]中的预期状态代码(HttpResponseMessageResponse,String commandDescription,HttpStatusCode[]expectedStatusCodes)。cs:Neo4jClient的第41行。处决HttpResponseMessageExtensions。确保[PATH_HIIDEN]\Neo4jClient\Execution\HttpResponseMessageExtensions]中的预期状态代码(httpresponsemessageresponse,HttpStatusCode[]预期状态代码)。cs:Neo4jClient的第14行。处决响应生成器。

这个错误可以在下一个版本中修复吗?

编辑2

using (var transaction = client.BeginTransaction())
{
    manifest.Users = client.Cypher
        .Merge("(n:User { Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa'}) " +
            "ON CREATE " +
            "SET n = { " +
                "Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa', " +
                "UserName: 'test.user', " +
                "Name: 'Test User', " +
                "Active: true " +
            "} " +
            "ON MATCH " +
            "SET n = { " +
                "Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa', " +
                "UserName: 'test.user', " +
                "Name: 'Test User', " +
                "Active: true " + 
            "}")
        .Return(n => n.As<User>())
        .Results
        .ToList();
    transaction.Commit();
}

这意味着fluent Api导致了错误。

共有1个答案

韩夕
2023-03-14

所以问题是在Neo4j2.2中。6引入了一个变更,即任何ClientError(约束冲突等)都会导致服务器上事务的自动回滚。

Neo4jClient已经执行了错误自动回滚操作,并继续执行此操作。2.2。6这导致404错误,因为事务不再存在(以前的版本可以)。

所以,我做了一个修复并发布了一个更新的Nuget包,所以版本1.1。Neo4jClient的0.12现在将为您提供正确的响应。

 类似资料:
  • 我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消

  • 我在Neo4jClient中的ID工作方式有问题。我想要我的。NET模型具有标识符属性,理想情况下,我希望只对该节点使用Neo4j自动增量id。 但是,无论我在模型类中使用何种情况(,,),它总是将其作为另一个字段添加到Neo4j中(在创建新节点时将其保持为0)。因此,当我在Neo4j浏览器中查看该节点时,它有一个

  • 在服务类中放置“”批注时,出现以下错误 描述: bean“student service”无法作为“”注入,因为它是实现:com.student.service.studentService的JDK动态代理 示例代码: 行动: 考虑注入bean作为其接口之一,或者通过在和/或上设置来强制使用基于CGLIB的代理。 进程已完成,退出代码为%1 这是什么原因造成的?

  • 我使用Grails2.3.3构建了一个成功的应用程序。 下面是PicturesNWSHR的域定义: -迈克

  • 我有一个Spring Boot应用程序,它使用原子作为事务管理器,我看到了这个日志: 错误:标识符为“1096044365_MTCYLJE3LJAUMY50BTAWDAYMDE=_MTYLJE3L JAUMY50BTQWMG=”的已准备事务不存在 连续打印。 在阅读了Atomicos文档后,我了解到Atomfos有一些崩溃恢复机制,我遵循了这个 http://fogbugz.atomikos.co

  • 问题内容: 最近,在一个用于mysql数据库的PHP脚本中,我需要在恰好位于另一个事务内部的某个位置使用事务。我所有的测试似乎都表明这很好,但是我找不到有关此用法的任何文档。 我想确定-交易中的交易在mysql中是否有效?如果是这样,是否有办法找出嵌套事务中的层数?(即恢复到正常状态需要多少回滚) 预先感谢,Brian 问题答案: 手册的本页可能使您感兴趣: 12.3.3。 导致隐性提交的陈述 ;