*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*

Reply via email to