新的Cassandra绑定语句getDate方法

时间:2018-06-21 14:22:35

标签: java spring date cassandra

在一个有点遗留的项目中,我们在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团队进行这种选择肯定有充分的理由。我很高兴听到一个了解更多的人的意见。

1 个答案:

答案 0 :(得分:4)

upgrade guide所述,驱动程序2中的

getDate已从驱动程序3.0中移至getTimestamp

  
      
  1. 对于新的CQL类型,字母和设置器已添加到“数据容器”类中:

         
        
    • 用于TINYINT类型的getByte / setByte
    •   
    • getShort / setShort用于SMALLINT类型
    •   
    • getTime / setTime作为TIME类型
    •   
    • getDate / setDate作为DATE类型
    •   
  2.   
     

TIMESTAMP CQL类型的方法已重命名为getTimestamp和setTimestamp。

     

这会影响Row,BoundStatement,TupleValue和UDTValue。

主要理由是在Cassandra 3.0中添加了date类型。为了避免将来造成混乱,我们将现有的getDate移至getTimestamp,以便get方法与它们的cql类型名称相匹配。