1

私はそれらのモデルを手に入れました(簡略化):

User(id: Int, name: String)
Restaurant(id: Int, ownerId: Int, name: String)
Employee(userId: Int, restaurantId: Int)

このクエリを使用すると:

for {
    r <- Restaurants
    e <- Employees
    if r.ownerId === userId || (e.userId === userId && e.restaurantId === r.id)
  } yield r

これは次のように変換されます:

select x2."id", x2."owner_id", x2."name" from "restaurants" x2, "employees" x3 where (x2."owner_id" = 2) or ((x3."user_id" = 2) and (x3."restaurant_id" = x2."id"))

これまでのところ問題はありません。しかし、それらのデータを挿入すると:

User(1, "Foo")
User(2, "Fuu")
Restaurant(1, 2, "Fuu")
Restaurant(2, 1, "Foo")
Restaurant(3, 1, "Bar")
Employee(2, 2)
Employee(2, 3)

次にクエリを実行すると、次の結果が得られます。

List(Restaurant(1, 2, "Fuu"), Restaurant(1, 2, "Fuu"), Restaurant(2, 1, "Foo"), Restaurant(3, 1, "Bar))

Restaurant(1, 2, "Fuu")なぜ2 回存在するのかわかりません。

(私はorg.h2.Driverurl で使用していますjdbc:h2:mem:play)

何か不足していますか?

4

1 に答える 1