我已经定义了一个自定义的Cassandra类型和一个表,例如:
var domain = httpContextAccessor.HttpContext.User.Identity.Name.Split('\\').First();
var accountName = httpContextAccessor.HttpContext.User.Identity.Name.Split('\\').Last();
using (var entry = new DirectoryEntry($"LDAP://{domain}"))
{
using (var searcher = new DirectorySearcher(entry))
{
searcher.Filter = $"(sAMAccountName={name})";
searcher.PropertiesToLoad.Add("displayName");
var searchResult = searcher.FindOne();
if (searchResult != null && searchResult.Properties.Contains("displayName"))
{
var displayName = searchResult.Properties["displayName"][0];
}
else
{
// user not found
}
}
}
如何在Scala中的Cassandra表定义中定义此用户类型?
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]
^^^^^??? ^^^???
实施自定义UserColumn
?我检查了Phantom代码的列实现,但任何示例和/或解释都会很棒。
答案 0 :(得分: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...]
答案 1 :(得分: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]
}
这将为您提供自动化架构生成以及其他任何功能,包括自动初始化UDT。