Hello Alexandr, I replied on the Java driver mailing list. TL;DR: you forgot to flip your buffers.
Thanks, Alexandre On Mon, Sep 12, 2016 at 3:59 PM Alexandr Porunov <alexandr.poru...@gmail.com> wrote: > > *Hello,* > > *I am using DataStax Java Driver and can not execute "save" command with > the object mapper.* > > *I have next table:* > > CREATE TABLE media_upload.audio_info ( > swift_id blob, > size bigint, > audio_id blob, > last_succeed_segment bigint, > PRIMARY KEY (swift_id) > ); > > *Here is my table in Java:* > > package com.loader.entity.tmp; > > import com.datastax.driver.mapping.annotations.Column; > import com.datastax.driver.mapping.annotations.PartitionKey; > import com.datastax.driver.mapping.annotations.Table; > import com.datastax.driver.mapping.annotations.Transient; > > import javax.xml.bind.DatatypeConverter; > import java.nio.ByteBuffer; > > @Table(keyspace = "media_upload", name = "audio_info", > readConsistency = "QUORUM", > writeConsistency = "QUORUM", > caseSensitiveKeyspace = false, > caseSensitiveTable = false) > public class AudioInfo{ > > private ByteBuffer swiftId; > > private Long size; > > private ByteBuffer audioId; > > private Long lastSucceedSegment; > > @PartitionKey > @Column(name = "swift_id") > public ByteBuffer getSwiftId() { > return swiftId; > } > > @Column(name = "size") > public Long getSize() { > return size; > } > > @Column(name = "audio_id") > public ByteBuffer getAudioId() { > return audioId; > } > > @Column(name = "last_succeed_segment") > public Long getLastSucceedSegment() { > return lastSucceedSegment; > } > > public void setSwiftId(ByteBuffer swiftId){ > this.swiftId=swiftId; > } > > @Transient > public String getHexSwiftId() { > return DatatypeConverter.printHexBinary(swiftId.array()); > } > > @Transient > public void setSize(Long size){ > this.size=size; > } > > @Transient > public String getHexAudioId() { > return DatatypeConverter.printHexBinary(audioId.array()); > } > > @Transient > public void setAudioId(ByteBuffer audioId){ > this.audioId=audioId; > } > > @Transient > public void setLastSucceedSegment(Long lastSucceedSegment){ > this.lastSucceedSegment=lastSucceedSegment; > } > > @Transient > @Override > public String toString() { > return "{swift_id='"+getHexSwiftId()+ > "',size='"+getSize()+ > "',audio_id='"+getHexAudioId()+ > "',last_succeed_segment='"+lastSucceedSegment+"'}"; > } > } > > *Here is what I am doing to save AudioInfo:* > > AudioInfo audioInfo = new AudioInfo(); > audioInfo.setSwiftId(ByteBuffer.allocate(Long.BYTES).putLong(123)); > audioInfo.setAudioId(ByteBuffer.allocate(Long.BYTES).putLong(124)); > audioInfo.setLastSucceedSegment(0L); > audioInfo.setSize(100L); > mapper.save(audioInfo); > > *After "mapper.save(audioInfo);" I am getting an error:* > com.datastax.driver.core.exceptions.InvalidQueryException: Key may not be > empty > 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:174) > at > com.datastax.driver.core.RequestHandler.access$2600(RequestHandler.java:43) > at > com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:793) > at > com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:627) > at > com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1012) > at > com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:935) > at > io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321) > at > io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321) > at > io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321) > at > io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) > at > io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328) > at > io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:321) > at > io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1280) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) > at > io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:328) > at > io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:890) > at > io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) > at > io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:564) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:505) > at > io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:419) > at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:391) > at > io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112) > at java.lang.Thread.run(Thread.java:745) > > *The strange thing happens when I am using next code:* > AudioInfo audioInfo = new AudioInfo(); > audioInfo.setSwiftId(ByteBuffer.allocate(Long.SIZE).putLong(123)); > audioInfo.setAudioId(ByteBuffer.allocate(Long.SIZE).putLong(124)); > audioInfo.setLastSucceedSegment(0L); > audioInfo.setSize(100L); > mapper.save(audioInfo); > > *It adds without error but in the database I see that both swift_id and > audio_id have next value:* > > 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > > *What am I doing wrongly?* > > *Sincerely,* > *Alexandr* > -- Alexandre Dutra Driver & Tools Engineer @ DataStax