2017-01-01 8 views
0

Если у меня есть класс случай, который выглядит как:Должны ли мои классы занятий иметь коллекции из моих ассоциаций?

case class User(id: Int, name: String, addresses: Seq[Address]) 

case class Address(id: Int, userId: Int, name: String) 

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

Я никогда не использовал ассоциации в пятнах, прежде чем так немного смутился.

+0

Надеюсь, что я не заявляю о явном (IDK ваш фон программирования). Это классы объектов, которые вы хотели бы иметь (в своем приложении). Большинство реляционных баз данных не поддерживают объекты, они манипулируют строками, которые являются плоскими. Это означает, что ваши классы Slick, которые представляют ваши строки в базе данных, должны быть плоскими (без последовательностей, деревьев и т. Д.). –

+0

Отношение, которое вы показываете, равно 1: N (у одного пользователя много адресов). Таким образом, вы бы сделали полное соединение (если пользователь должен иметь хотя бы один адрес) или левое соединение (если оно может иметь ноль или более адресов). И тогда вы получите 'Seq [(Пользователь, адрес)]' => группу пользователем и создадите объекты своего домена, как вы указали. См. [Здесь] (http://olivebh.com/scala-play-slick.html) для получения более подробной информации. –

+0

Вот для более подробной информации о моделировании в slick http://youtube.com/watch?v=ciyjJLYIySY – pamu

ответ

2

Slick не ORM

Так, Slick не поддерживает вложенные объекты, как спящий режим. Если вы сильно хотите иметь вложенные объекты, модель Slick не подходит для вашего варианта использования. Этот пункт также явно упоминается в документах по slick.

Ваш случай использования в Слик моделируется как этот

case class User(id: Int, name: String) //id is the primary key 

case class Address(id: Int, name: String) //id is the primary key 

case class UserAddresses(userId: Int, addressId: Int) //userId, addressId are the foreign keys. 

Каждый из указанного класса случае запрашивает таблицу в базе данных и UserAddresses таблица устанавливает связь между Пользователем и адрес. Так, для одного пользователя вы можете иметь один или несколько адресов идентификаторов в таблице адресов пользователей (типичный способ базы данных отношение моделирования один ко многим отношений между субъектами)

UserAddresses захватывает один-много отношений между Пользователем и адрес

Обратите внимание, что дизайн выше выглядит как типичный дизайн базы данных, который вы бы хотели сделать в случае отношений один-много. В Slick эти модели представляют собой реляционные таблицы. Таким образом, для каждой таблицы нам нужна одна модель, которая представляет эту таблицу в коде. Slick помогает в написании sql agnostic, композиционных, многоразовых, типичных и scala-сборников, таких как запросы. Итак, конец кода кода Slick выглядит как код манипуляции с коллекциями Scala.

+0

, поэтому мне нужно создать 3 slick-таблицы, а затем обработать UserAddresses, как если бы это была другая таблица? – Blankman

+0

@Blankman да. Это точно так же, как дизайн БД отношения. – pamu

+0

Есть ли что-то вроде JPA в scala? Я попробовал anorm, slick, scalalikejdbc. Ни один из них не может предоставить smth, подобный JPA ... ((( – Sergey