我正在cassandra表中存储scala case类数据,为此,我需要定义用户定义的类型。我可以写cql查询,但不知道如何解析它。com.datastax.driver.mapping.annotations.udt我尝试过这个注解,但它对我无效。我想我完全偏离了轨道。我也试过属于我的课程 com.datastax.driver.core.Session.
我的结论是我不知道该怎么做,我只是在用追踪法。
case class Properties(name: String,
label: String,
description: String,
groupName: String,
fieldDataType: String,
options: Seq[OptionalData]
)
object Properties{
implicit val format: Format[Properties] = Json.format[Properties]
}
case class OptionalData(label: String, name: String)
object OptionalData{
implicit val format: Format[OptionalData] = Json.format[OptionalData]
}
我的问题是:
val optionalData: String=
"""
|CREATE TYPE IF NOT EXISTS optionaldata(
|label text,
|name text
);
""".stripMargin
val createPropertiesTable: String = """
|CREATE TABLE IF NOT EXISTS prop(
|name text Primary Key,
|label text,
|description text,
|groupname text,
|fielddatatype text,
|options LIST<frozen<optionaldata>>
);
""".stripMargin
com.datastax.driver.core.exceptions.invalidqueryexception:未知类型leadpropdb3.optionaldata java.util.concurrent.executionexception:com.datastax.driver.core.exceptions.invalidqueryexception:未知类型leadpropdb3.optionaldata位于com.google.common.util.concurrent.abstractfuture.getdonevalue(abstractfuture)。java:552)在com.google.common.util.concurrent.abstractfuture.get(抽象未来。java:513)在akka.persistence.cassandra.package$listenablefuturecoverter$$anon$2.$anonfun$run$2(包)。scala:25)在scala.util.try$.apply(try。scala:213)在akka.persistence.cassandra.package$listenablefuturecoverter$$anon$2.run(package。scala:25)在akka.dispatch.taskinvocation.run(abstractdispatcher。scala:40)位于java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor。java:1149)在java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor。java:624)在java.lang.thread.run(线程。java:748)原因:com.datastax.driver.core.exceptions.invalidqueryexception:未知键入leadpropdb3.optionaldata
1条答案
按热度按时间w9apscun1#
从错误消息中可以清楚地看出,类型没有被创建—您需要在创建表之前创建它—在从代码中执行cql语句时要非常小心—您需要等到模式达成协议后,再执行下一个语句。下面是一个java代码的例子,可以很容易地将其转换为scala。
当您在scala中使用对象Map器时,您需要遵守一些规则(我希望我关于这个主题的博客文章很快就会发表):
你需要使用java类型-
List
而不是Seq
等,或者为scala使用额外的编解码器;case类应该有空构造函数。
但在其他情况下,可以将对象Map器与scala一起使用,如下所示:
更多的例子可以在我的回购。