私はSlick 1を使用しています。クエリにフィルタを適用して、関連するテーブルの条件に一致するすべてのエンティティを参照できるようにする必要があります。スラックのSELECT DISTINCT
この例では、Slickのドキュメントを使用して、私がしようとしていることを示しています(これは自分の状況に近い実例です)。
ここでは、西海岸のサプライヤーから提供されているすべてのコーヒーが欲しいです。私はコーヒーをのみ、私はフィルタを適用するためにサプライヤーに移動中にのみ興味を持っていたい:これはうまく動作
val westCoast = Seq("CA", "OR", "WA")
val implicitInnerJoin = for {
c <- Coffees
s <- Suppliers if c.supID === s.id && s.state inSet westCoast
} yield c
が、仕入先テーブル内の複数の一致がある場合、それはコーヒーを複製します。
明白な回避策は、通常のSQLでSELECT DISTINCTを実行することです。しかし、私はここでそれを行う方法を見つけることができません。
あなたは理論的に行うことができます:
query.list.distinct
を結果が既に返された後、しかし、私はPAGINGサポートも実装しているので、すでにデータベースから戻ってきた結果を処理したくないでしょう。
query.drop(offset).take(limit).list
ので、一言で言えば、私が出て行く私のクエリでSELECT DISTINCTを指定する方法が必要になり:ここでページングのサポートです。
誰もが考えている?
ねえ、この1つは働きました!私はなぜ、私は深いダイビングをもっとしなかったのか正確には分かっていませんが、私は迅速な修正が必要でした。 – noplay
なんらかの理由で、これは 'ClassCastException'がスローされた' XxxRow'エンティティの代わりに 'scala.TupleN'を返します。 –
これは原因のようです:https://github.com/slick/slick/pull/735 –