Java cassandra插入和更新
我的cassandra数据库有一个名为“createdClientId”和“updateClientId”的列。我的模型类有一个名为id(primary_key)、createdClientId和updateClientId的字段。我的请求是一个post请求,它以客户端id作为头,并且在插入时,该客户端id需要是“createdClientId”和“updateClientId”列的值,并且在更新时只应更新“updateClientId” 我的刀看起来像这样Java cassandra插入和更新,java,spring-mvc,cassandra,Java,Spring Mvc,Cassandra,我的cassandra数据库有一个名为“createdClientId”和“updateClientId”的列。我的模型类有一个名为id(primary_key)、createdClientId和updateClientId的字段。我的请求是一个post请求,它以客户端id作为头,并且在插入时,该客户端id需要是“createdClientId”和“updateClientId”列的值,并且在更新时只应更新“updateClientId” 我的刀看起来像这样 public void getdat
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字段都使用相同的客户端id值保存)但是,当我更新时,它应该只更新updateClientId,而不是更新createdClientId。为什么每次都更新
createdClientId
是因为这一行model.setupdateClientId(clientId)每次执行代码>,然后创建插入字符串
stringinsert=SimpleJson.writeValueAsString(model)
并在这两种情况下都使用此字符串,因此createdClientId
得到更新
一种解决方案是将数据分为两个单独的Cassandra表:一个表只保存一次createdClientId
数据,另一个表支持频繁更新,其中包含updatedClientId
(两者都以clientId
作为主键)并在第一个表查询中使用“如果不存在”
。
这里的缺点是,对于每个post请求,您必须向Cassandra发出两个请求,但是如果您使用“if NOT EXISTS”(如果不存在)