【问题标题】:eqs on Option[UUID] type? Phantom + Cassandra + ScalaOption[UUID] 类型的 eqs? Phantom + Cassandra + Scala
【发布时间】:2015-02-28 07:18:33
【问题描述】:
我正在使用 Phantom 框架与 Cassandra 一起工作,并且我正在尝试对 Option 字段进行 eqs,例如。
Address.select.where(_.id eqs Some(uuid)).one()
然后我得到“值 eqs 不是对象的成员”
有没有办法做到这一点?我想不通...
id字段是一个Option[UUID],因为我在Play Framework中接收POST请求时它必须为null,但我不知道如何在幻像中进行断言
我也在 github 上开了一个 issue。
https://github.com/websudos/phantom/issues/173
【问题讨论】:
标签:
scala
cassandra
phantom-dsl
【解决方案1】:
Phantom 依靠一系列隐式转换来提供大部分功能。解决编译幻像表时遇到的大多数错误的一种非常简单的方法是确保相关导入在范围内。
幻影 1.7.0 之前
import com.websudos.phantom.Implicits._
1.7.0 之后
import com.websudos.phantom.dsl._
除了隐式机制之外,phantom 还将帮助您为 Cassandra 中的大量有用对象设置别名:
- 幻像连接器
- Cassandra 一致性级别
- 键空间
在 CQL 中使用潜在的 null 值作为 PRIMARY KEY 的一部分也是错误的,因为 CQL 主的任何部分都不能是 null。将处理逻辑移到幻象之外是一个更好的主意。
传统上,表 -> 数据库服务 -> api 控制器 -> api 方法是构建模块化应用程序的方式,具有更好的关注点分离。最好将简单的 I/O 保持在表级别,将应用级别的一致性保持在 db 服务级别,并将所有处理逻辑保持在更高级别。
希望这会有所帮助。
【解决方案2】:
使用
import com.websudos.phantom.Implicits._
有效!!!