簡體   English   中英

Phantom DSL和Cassandra自定義列類型

[英]Phantom DSL and Cassandra custom column type

我已經定義了一個自定義的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]
                      ^^^^^???                           ^^^???

如何為UserType實現自定義UserColumn 我檢查了Phantom代碼以實現列的實現,但是任何示例和/或解釋都很好。

因此,根據該庫的作者所說,phantom的開源版本不支持用戶定義的類型: https : //github.com/outworkers/phantom/issues/496

但是,您可以通過擴展MapColumn來部分克服該問題,如下所述: 凍結類型的Phantom-DSL cassandra 當然,這不是完美的,例如,您將無法生成用於架構創建的CQL,而您將不得不執行一些手動管道。

所以或多或少會像這樣:

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

僅在phantom pro中。

@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的自動初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM