编解码器未找到请求的操作:[时间戳<-> java.util.UUID]
问题描述:
我在Cassandra中有一个表,我试图从中迭代和提取东西。我正在使用datastax java驱动程序3.1.0。编解码器未找到请求的操作:[时间戳<-> java.util.UUID]
CREATE TABLE test (
client_id int,
process_id text,
last_modified_date timestamp,
PRIMARY KEY ((client_id), process_id)
)
下面是代码:
private List<MetaHolder> getMetaHolder() {
List<MetaHolder> metaHolder = new ArrayList<>();
String sql = "select * from test where client_id=1";
try {
BoundStatement bs = Cache.getInstance().getStatement(sql);
bs.setConsistencyLevel(ConsistencyLevel.QUORUM);
ResultSet res = session.execute(bs);
Iterator<Row> rows = res.iterator();
while (rows.hasNext()) {
Row row = rows.next();
String processId = row.getString("PROCESS_ID");
// this line throws exception
UUID lastModifiedDate = row.getUUID("LAST_MODIFIED_DATE");
MetaHolder metadata =
new MetaHolder(processId, lastModifiedDate);
metaHolder.add(metadata);
}
} catch (Exception ex) {
LOGGER.logError("error= ", ExceptionUtils.getStackTrace(ex));
}
return metaHolder;
}
以下是例外:
error= com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> java.util.UUID]
有什么办法,我可以通过创建一个编解码器如果可能的话,而不是在这里使用UUID使用JodaTime在我的代码?
答
更改下面的代码
UUID lastModifiedDate = row.getUUID("LAST_MODIFIED_DATE");
到
Date lastModifiedDate = row.getTimestamp("LAST_MODIFIED_DATE");
您可以从日期得到乔达日期时间
DateTime lastModifiedDateTime = new DateTime(lastModifiedDate);
'类型不匹配:不能从转换到LOCALDATE Date'。我已经试过了,这是我得到的错误。此外,我想在这里使用JodaTime,所以看起来像我可以通过创建一个编解码器来做到这一点,但不知道如何.. – john
是的,但我的问题是如何使用JodaTime而不是将其作为日期。我正在阅读[this](http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/extras/),但没有完全遵循。 – john