Несколько левых соединений, использующих пятно? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть следующие скользкие объекты:

class Person(personId, houseId, carId)
class House(houseId)
class Car(carId)

Я хочу выбрать человека и его дополнительный дом и машину, мой запрос:

val query = personTable
      .filter(_.personId === personId)
      .joinLeft(houseTable)
      .on(_.houseId === _.houseId)
      .joinLeft(carTable)
      .on(_._1.carId === _.carId)
      .result
      .headOption

Однако, тип возвратазапроса выглядит немного забавно, я ожидаю, что это будет кортеж (человек, дом, машина):

Option[(Person, Option[House], Option[Car])]

Но на самом деле это кортеж (кортеж (человек, дом), машина):

Option[((Person, Option[House]), Option[Car])]

Данные, которые возвращаются, действительно верны, они просто в необычной структуре, может быть, я не правильно выполняю множественные объединения выше?

1 Ответ

0 голосов
/ 11 октября 2018

Все выглядит нормально для меня.

Если вам не нравится текущий тип данных, вы можете map в своем запросе изменить его, например, например:

val query = personTable
      .filter(_.personId === personId)
      .joinLeft(houseTable)
      .on(_.houseId === _.houseId)
      .joinLeft(carTable)
      .on(_._1.carId === _.carId)
      .map{case((person, houseOpt), carOpt) => (person, houseOpt, carOpt)}
      .result
      .headOption
...