当我尝试在不使用事务的情况下更新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。连载。CypherJsonDeserializer
1.在[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导致了错误。
所以问题是在Neo4j
2.2中。6引入了一个变更,即任何ClientError
(约束冲突等)都会导致服务器上事务的自动回滚。
Neo4jClient
已经执行了错误自动回滚操作,并继续执行此操作。2.2。6这导致404错误,因为事务不再存在(以前的版本可以)。
所以,我做了一个修复并发布了一个更新的Nuget包,所以版本1.1。Neo4jClient的0.12
现在将为您提供正确的响应。
我在Neo4jClient中的ID工作方式有问题。我想要我的。NET模型具有标识符属性,理想情况下,我希望只对该节点使用Neo4j自动增量id。 但是,无论我在模型类中使用何种情况(,,),它总是将其作为另一个字段添加到Neo4j中(在创建新节点时将其保持为0)。因此,当我在Neo4j浏览器中查看该节点时,它有一个
我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消
在服务类中放置“”批注时,出现以下错误 描述: 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。 导致隐性提交的陈述 ;