0

我已经定义了一个自定义 Cassandra 类型和一个表,例如:

CREATE TYPE my.usertype (
  id text,
  firstname text,
  lastname text
);


CREATE TABLE mytable (
  user frozen <usertype>,
  ...,
  PRIMARY KEY(user)
);

如何在 Scala 的 Cassandra 表定义中定义此用户类型?

class MyTable extends CassandraTable[X, Y] {
  object user extends UserColumn(this) with PartitionKey[User]
                      ^^^^^???                           ^^^???

如何实现自UserColumn定义UserType?我检查了列实现的 Phantom 代码,但任何示例和/或解释都会很棒。

4

2 回答 2

2

仅限幻影专业版。

@Udt case class User(
  id: String,
  firstname: String,
  lastname: String
)

然后你使用UDTColumn

class MyTable extends Table[MyTable , Y] {
    object user extends Col[User] with PartitionKey
}

这将为您提供自动模式生成和其他任何功能,包括 UDT 的自动初始化。

于 2016-10-10T23:31:21.060 回答
2

因此,根据库的作者的说法,phantom 的开源版本不支持用户定义的类型:https ://github.com/outworkers/phantom/issues/496

但是,您可以通过扩展 MapColumn 来部分克服这一点,如下所述:Phantom-DSL cassandra with freeze type。当然,这并不完美,例如,您将无法为模式创建生成 CQL,并且您将不得不进行一些手动管道。

所以或多或少可能像这样:

class MyTable extends CassandraTable[MyTable , Y] {
    object user extends MapColumn[MyTable , Y, String, String](this) with PartitionKey[MapColumn...]
于 2016-10-10T21:59:17.203 回答