cassandra触发器异常:invalidqueryexception:附加突变表与主更新表不匹配

jw5wzhpr  于 2021-06-15  发布在  Cassandra
关注(0)|答案(0)|浏览(224)

我在table上用Cassandra触发器。我遵循这个示例,用“nodetool reloadtriggers”加载trigger jar。那我用的是

'CREATE TRIGGER mytrigger ON ..'

来自cqlsh的命令在我的表上创建触发器。在该表中添加一个条目,我的审计表将被填充。但是从java应用程序中调用一个方法,通过使用'session.execute(boundstatement)'将条目持久化到我的表中,我得到了以下异常:

InvalidQueryException: table of additional mutation does not match primary update table

为什么直接用cqlsh进行表的插入和审计是有效的,为什么在用java应用程序进行几乎完全相同的操作时失败?
我将此用作audittrigger,非常简单(省略了除行插入以外的所有其他操作:

public class AuditTrigger implements ITrigger {
    private Properties properties = loadProperties();

    public Collection<Mutation> augment(Partition update) {
      String auditKeyspace = properties.getProperty("keyspace");
      String auditTable = properties.getProperty("table");

      CFMetaData metadata = Schema.instance.getCFMetaData(auditKeyspace, 
      auditTable);

      PartitionUpdate.SimpleBuilder audit = 
      PartitionUpdate.simpleBuilder(metadata, UUIDGen.getTimeUUID());

      if (row.primaryKeyLivenessInfo().timestamp() != Long.MIN_VALUE) {
                // Row Insertion
                JSONObject obj = new JSONObject();
                obj.put("message_id", update.metadata().getKeyValidator()
                .getString(update.partitionKey().getKey()));
                audit.row().add("operation", "ROW INSERTION");
          }
          audit.row().add("keyspace_name", update.metadata().ksName)
                     .add("table_name", update.metadata().cfName)
                     .add("primary_key", update.metadata().getKeyValidator()
                         .getString(update.partitionKey()
                         .getKey()));

    return Collections.singletonList(audit.buildAsMutation());

好像使用了boundstatement,触发器失败了:

session.execute(boundStatement);

,但使用常规的cql查询字符串是可行的。

session.execute(query)

不过,我们在应用程序中的任何地方都在使用boundstatement,不能改变这一点。任何帮助都将不胜感激。
谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题