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")含むクエリを生成することです。wherefalse

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 に答える