5

我正在尝试为此编写一个查询模板:

val byIdentifier = for {
  (identifier, issuer) <- Parameters[(String, String)]
  o <- Objects if (o.identifier === identifier) && (o.identifierIssuer === issuer)
} yield o

然后像这样使用它:

def findByIdentifier(id: String, issuer: String): Option[Object] = 
  byIdentifier(id, issuer).firstOption

Objects是一个带有提升嵌入的表:

case class Object(val identifer: String, val identifierIssuer: String)

object Objects extends Table[Object]("objects") {
  def identifier = column[String]("identifier")
  def identifierIssuer = column[String]("identifier_issuer")
  ...
}

我遇到的问题是findByIdentifier("asdf", "weqr")产生一个带有以下where子句的查询false

select ... from "objects" where false

我的查询模板中缺少什么来进行正确的查询?

4

1 回答 1

1

尝试以下语法:

val byIdentifier = for {
  (identifier, issuer) <- Parameters[(String, String)]
  o <- Objects
  if o.identifier === identifier
  if o.identifierIssuer === issuer
} yield o

我经常发现 slick 的语法可能有点不靠谱,而且当前的文档也不是特别好。

你也可以让你findByIdentifier的工作:

def findByIdentifier(id: String, issuer: String): Option[Object] = {
    Query(Object).where(_.identifier === id).where(_.identifierIssuer === issuer).run.headOption
}

我希望这会有所帮助...

于 2013-12-10T01:23:59.673 回答