我的cassandra数据库有一个名为“ createdClientId”和“ updateClientId”的列。我的模型类有一个名为id(primary_key),createdClientId和updateClientId的字段。我的请求是一个后继请求,其中有一个客户机ID作为标头,并且该客户机ID在插入时需要是列“ createdClientId”和“ updateClientId”的值,并且在更新时应仅更新“ updateClientId”
我的岛看起来像这样
public void getdata(Model model, String clientId) {
model.setcreatedClientId(clientId);
model.setupdateClientId(clientId);
String insert = SimpleJson.writeValueAsString(model);
// insert query
String query = PropertyManager.getProperty("prop") + insert + "' IF NOT EXISTS;";
ResultSet rs = cassandraTemplate.getCqlOperations().queryForResultSet(query);
if (rs != null) {
LOGGER.log(DEBUG, "Result set is not null");
if (rs.wasApplied()) {
response.setMessage(RESPONSE_MESSAGE + " Created successfully");
} else if (!rs.wasApplied()) {
model.setUpdatedBy(clientId);
// update query
query = PropertyManager.getProperty("prop") + insert + "'";
cassandraTemplate.getCqlOperations().queryForResultSet(query);
response.setMessage(RESPONSE_MESSAGE + " Updated successfully");
}
}
}
现在,当我插入数据时,它可以正常工作(即,两个createdClientId和updateClientId字段都使用相同的client-id值进行保存),但是当我更新时,它应该仅更新updateClientId,而不是它也应该更新createdClientId。
答案 0 :(得分:1)
createdClientId
也在每次更新的原因是此行
每次执行model.setupdateClientId(clientId);
,然后创建插入字符串
String insert = SimpleJson.writeValueAsString(model);
,并在两种情况下都使用此字符串,因此createdClientId
得到更新。
一种解决方案是将您的数据分为两个单独的Cassandra表:一个表仅将createdClientId
个数据持久保存一次,而另一个表则支持包含updatedClientId
的频繁更新(两个表都包含{{1} }作为主键),并在第一个表查询中使用clientId
。
这里的缺点是您必须为每个发帖请求向Cassandra发送两个请求,但是如果您使用'IF NOT EXISTS'