导入Datastax QueryBuilder以避免scala中的QueryBuilder.eq

时间:2014-09-07 17:39:23

标签: scala cassandra datastax-java-driver

在查看Datastax Cassandra驱动程序的示例时​​,where条款通常最终会如下所示:

val select = QueryBuilder.select()
  .all()
  .from("addressbook", "contact")
  .where(eq("type", "Friend"))

但是当我在scala中尝试这个时,我得到了这个错误:

Error:(25, 75) type mismatch;
 found   : Boolean
 required: com.datastax.driver.core.querybuilder.Clause

为了让它发挥作用,我始终必须在eq前加上QueryBuilder.eq作为前缀才能使其正常工作:

val select = QueryBuilder.select()
  .all()
  .from("addressbook", "contact")
  .where(QueryBuilder.eq("type", "Friend"))

我尝试导入QueryBuilder._,因为eq是一种静态方法,但这并没有帮助。我缺少什么设置来使用示例中更简洁的表单?

1 个答案:

答案 0 :(得分:2)

eq是在AnyRef上定义的标准Scala方法(对于Scala来说,==对Java来说是什么)。非前缀版本可能解析为在包含语句定义的对象上调用eq

您可以做的一件事是重命名导入:

import QueryBuilder.{eq => equ} // TODO find a better name :-)

我们甚至可以为驱动程序提供内置别名,因为我想其他人会碰到这个。

如果有更清洁的解决方案,我有兴趣了解它。