Java 就主键而言,Cassandra LWT是否具有IF部分

Java 就主键而言,Cassandra LWT是否具有IF部分,java,transactions,cassandra,datastax-java-driver,Java,Transactions,Cassandra,Datastax Java Driver,Cassandra轻量级事务是否使用隐式集合,因此就主键而言不能有IF部分 我这样问是因为Datastax Cassandra Java驱动程序版本2.1.5在我准备语句时抛出了InvalidQueryException。异常消息非常清楚: 在集合部件中找到主键部件名称 只是它正在准备的查询没有尝试设置主键。问题是 UPDATE operator SET password = :password WHERE name = :name IF name = :name; 如您所见,查询不设置密码

Cassandra轻量级事务是否使用隐式集合,因此就主键而言不能有IF部分

我这样问是因为Datastax Cassandra Java驱动程序版本2.1.5在我准备语句时抛出了InvalidQueryException。异常消息非常清楚:

在集合部件中找到主键部件名称

只是它正在准备的查询没有尝试设置主键。问题是

 UPDATE operator SET password = :password WHERE name = :name IF name = :name;
如您所见,查询不设置密码,也不设置名称;名称是运算符表的主键。只有当轻量级事务的if name=:name是使用SET name=….实现的时,异常消息才有意义

如果我从查询中删除If name=:name部分,驱动程序不会抱怨试图设置primry键

以下是完整的堆栈跟踪:

org.springframework.dao.InvalidDataAccessResourceUsageException: PRIMARY KEY part name found in SET part; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: PRIMARY KEY part name found in SET part at com.example.application.datalayer.DriverExceptionTranslator.translateExceptionIfPossible(DriverExceptionTranslator.java:200) ~[application-user.jar:1.0.0-SNAPSHOT] at com.example.application.datalayer.DriverExceptionTranslator$ExceptionTranslationAdvice.afterThrowing(DriverExceptionTranslator.java:50) ~[application-user.jar:1.0.0-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invokeHandlerMethod(ThrowsAdviceInterceptor.java:145) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:130) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.$Proxy0.addUser(Unknown Source) ~[na:1.0.0-SNAPSHOT] at com.example.application.user.Add.tryToAddUser(Add.java:294) [application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.Add.performOperation(Add.java:266) [application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.Mode.run(Mode.java:812) [application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.Mode.runProgram(Mode.java:79) [application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.Add.main(Add.java:63) [application-user.jar:1.0.0-SNAPSHOT] Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: PRIMARY KEY part name found in SET part at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35) ~[application-user.jar:1.0.0-SNAPSHOT] at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:289) ~[application-user.jar:1.0.0-SNAPSHOT] at com.datastax.driver.core.AbstractSession.prepare(AbstractSession.java:79) ~[application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.CassandraUserRepository$SessionAdapter.(CassandraUserRepository.java:80) ~[application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.CassandraUserRepository.getSessionAdapter(CassandraUserRepository.java:447) ~[application-user.jar:1.0.0-SNAPSHOT] at com.example.application.user.CassandraUserRepository.addUser(CassandraUserRepository.java:317) ~[application-user.jar:1.0.0-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[application-user.jar:1.0.0-SNAPSHOT] at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:125) ~[application-user.jar:1.0.0-SNAPSHOT] ... 8 common frames omitted Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: PRIMARY KEY part name found in SET part at com.datastax.driver.core.Responses$Error.asException(Responses.java:103) ~[application-user.jar:1.0.0-SNAPSHOT] at com.datastax.driver.core.SessionManager$1.apply(SessionManager.java:185) ~[application-user.jar:1.0.0-SNAPSHOT] at com.datastax.driver.core.SessionManager$1.apply(SessionManager.java:160) ~[application-user.jar:1.0.0-SNAPSHOT] at com.google.common.util.concurrent.Futures$1.apply(Futures.java:720) ~[application-user.jar:1.0.0-SNAPSHOT] at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:859) ~[application-user.jar:1.0.0-SNAPSHOT] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_75] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_75] at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_75]
如果name='foo',则不能对分区键列设置条件,因为该列已在where子句中受到限制,其中name='foo'


错误消息确实存在问题。Cassandra 2.1.4 I get显然已经解决了这一问题:主键列“name”不能有IF条件。

如果name='foo',则不能在分区键列上设置条件,因为该列已在where子句where name='foo'中受到限制

错误消息确实存在问题。卡桑德拉2.1.4我明白了:主键列“name”不能有IF条件。

,在2.0.11和2.1.1中修复,在2.0.11和2.1.1中修复。