Cassandra触发器异常:InvalidQueryException:其他突变表与主更新表不匹配

时间:2018-09-27 17:43:57

标签: cassandra database-trigger

我在桌上使用Cassandra触发器。我正在跟踪示例,并使用“ nodetool reloadtriggers”加载触发器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 queryString可以工作。

session.execute(query)

虽然我们在应用程序中的任何地方都使用Boundstatement,但不能更改它。 任何帮助将不胜感激。

谢谢

0 个答案:

没有答案