2016-10-10 48 views
0

我已经定义了一个自定义的卡桑德拉式和一张桌子,e.g:幻象DSL和卡桑德拉自定义字段类型

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


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

我如何定义在斯卡拉卡桑德拉表定义这种用户类型?

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

我怎样才能实现对UserType定制UserColumn?我检查了Phantom代码的列实现,但任何示例和/或解释都会很好。

回答

1

在幻象只有亲,这将提供给订阅在2个星期时间:

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

然后使用UDTColumn

class MyTable extends CassandraTable[MyTable , Y] { 
    object user extends UDTColumn[MyTable, Y, User](this) with PartitionKey[User] 
} 

这会给你自动模式生成,无论el包括自动初始化您的UDT。

1

所以根据图书馆的作者,用户定义类型是幻象的开源版本不支持:https://github.com/outworkers/phantom/issues/496

但是,您可能能够部分地克服延长MapColumn,因为它是描述如下: Phantom-DSL cassandra with frozen type。当然,这并不完美,例如您将无法为模式创建生成CQL,并且您将不得不执行一些手动管道。

所以或多或少会喜欢这样说:

class MyTable extends CassandraTable[MyTable , Y] { 
    object user extends MapColumn[MyTable , Y, String, String](this) with PartitionKey[MapColumn...] 
+0

谢谢您指向公关! – Bruckwald