我正在尝试使用spring-data-cassandra插入数据。但是当我的应用程序运行于SpringBoot(版本为1.5.3)时,出现以下错误提示
我在spring- data中添加了一个实现了CrudResposity的自定义CallHistoriyRespority对象,并使用save方法插入了数据对象
我找不到任何原因,这个问题使我感到困惑
全栈跟踪:
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Expected 8 or 0 byte long for date (13) at com.datastax.driver.core.Responses$Error.asException(Responses.java:136) at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179) at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:177) at com.datastax.driver.core.RequestHandler.access$2500(RequestHandler.java:46) at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:799) at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:633) at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1070) at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:993) at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:295) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:269) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144) at java.lang.Thread.run(Thread.java:748)
cassandra表的描述如下:
CREATE TABLE userdevices.callhistorylogs ( userid bigint, deviceid text, serialnumber timestamp, objectid text, dialtime timestamp, dialtype int, duration int, phone text, simid int, targetphone text, PRIMARY KEY ((userid, deviceid), serialnumber, objectid)
和我的Java配置如下:
@Table("callhistorylogs") public class CallHistoryLogPO{ @PrimaryKeyColumn(ordinal = 0 ,type = PrimaryKeyType.PARTITIONED) private Long userID; @PrimaryKeyColumn(ordinal = 1,type = PrimaryKeyType.PARTITIONED) private String deviceID; @PrimaryKeyColumn(ordinal = 2,type = PrimaryKeyType.CLUSTERED) private String serialNumber; @PrimaryKeyColumn(ordinal = 3,type = PrimaryKeyType.CLUSTERED) private String objectID; private Date dialTime; private Call.DialType dialType; private Integer duration; private String phone; private Integer simID; private String targetPhone; ..... }
保存方法如下:
CallHistoriesPO callHistories = new CallHistoriesPO(); callHistories.setUserID(20170627L); callHistories.setDeviceID("160129999"); callHistories.setPhone("17681879236"); ...... callHistoryResposity.save(callHistories);
serialNumber在卡桑德拉时间戳映射到java.util.Date,而你正在使用String的serialNumber。
serialNumber
java.util.Date
String
cql到java类型映射