在一个有点遗留的项目中,我们在Spring应用程序中使用了cassandra驱动程序的版本2。
该版本,尤其是类BoundStatement
公开了返回Java getDate的方法Date。我们都知道,旧的Java日期API相当糟糕,但是当谨慎使用时,它确实可以完成工作。
现在,由于某些必要,我们决定将cassandra驱动程序升级到3.4版。首先要注意的是,在此版本中,相同的方法getDate现在返回类型为LocalDate的日期,datastax团队实现了该日期的类以补充Java的日期。有关此类的有趣的事情在文档中有所记录:
ISO 8601中没有时间成分,没有时区的日期 日历。请注意,ISO 8601与 Java中使用的默认公历:它使用多用公历 日历,这意味着它可以无限期地追溯到过去 (没有阳历变化);有一年0。 实现这些差异,以便年/月/日字段匹配 完全是CQL字符串文字中的那些。
因此,基本上,此类会截断time
信息。此更改导致了基于日期比较的单元测试中的某些失败,并且需要进行一些测试修改。在我看来,这实际上似乎很奇怪,但是我想datastax团队进行这种选择肯定有充分的理由。我很高兴听到一个了解更多的人的意见。
答案 0 :(得分:4)
getDate
已从驱动程序3.0中移至getTimestamp
:
对于新的CQL类型,字母和设置器已添加到“数据容器”类中:
- 用于TINYINT类型的getByte / setByte
- getShort / setShort用于SMALLINT类型
- getTime / setTime作为TIME类型
- getDate / setDate作为DATE类型
TIMESTAMP CQL类型的方法已重命名为getTimestamp和setTimestamp。
这会影响Row,BoundStatement,TupleValue和UDTValue。
主要理由是在Cassandra 3.0中添加了date
类型。为了避免将来造成混乱,我们将现有的getDate
移至getTimestamp
,以便get方法与它们的cql类型名称相匹配。