无法将Cassandra中的String数组转换为blob

时间:2018-08-14 16:19:03

标签: scala cassandra datastax-java-driver

我正在以base64消息的形式发送json格式的图像。我想将图像存储在Cassandra中。卡桑德拉(Cassandra)中的相应列是``图像列表''

json中的图像数据为

image:["data:image/png;base64,iVBORw...","data:image/png;base64,idfsd..."]

此json作为数组[String]映射到我的模型-

映射到json的模型类是

case class PracticeQuestion (id: Option[UUID],
                              d: String,
                               h: List[String],
                               image: Array[String],//images maps here
                              s: String,
                               f: String,
                               t: Set[String],
                              title: String,
                              a:String,
                               r:List[String]) 

我已阅读到要在cassandra中存储图像,我需要ByteBuffer。因此,我使用ByteBuffer.wrap()将数组的数组不同索引转换为ByteBuffer。但是我的insert语句失败了。 Datastax错误是

我正在尝试将Array[String]转换为list<blob>

.value("image",seqAsJavaList(Seq[ByteBuffer](ByteBuffer.wrap(model.image(0).getBytes())))) 
 //for the moment, I am taking only 1 image

我拍摄第一个图像,获取其字节,创建一个BytesBuffer。我将BytesBuffer转换为Seq,然后将Seq转换为Java List

我看到的错误是com.datastax.driver.core.exceptions.InvalidTypeException: Value 6 of type class scala.collection.immutable.$colon$colon does not correspond to any CQL3 type

完整的插入命令是

QueryBuilder.insertInto(tableName).value("id",model.id.get)           .value("answer",model.a)
      .value("d",model.d)
      .value("f",model.f)
      .value("h",seqAsJavaList(model.h)) 
      .value("image",seqAsJavaList(Seq[ByteBuffer](ByteBuffer.wrap(model.image(0).getBytes())))) 
      .value("r",model.r)
      .value("s",model.s)
      .value("t",setAsJavaSet(model.t))
      .value("title",model.title)
      .ifNotExists();

数据库架构为

id uuid PRIMARY KEY,
    a text,
    d text,
    f text,
    h list<text>,
    image list<blob>,
    r list<text>,
    s text,
    t set<text>,
    title text

0 个答案:

没有答案