如果我有一個案例類,看起來像:我的案例類是否有我的關聯集合?
case class User(id: Int, name: String, addresses: Seq[Address])
case class Address(id: Int, userId: Int, name: String)
我應該或刪除用戶地址屬性時,我使用光滑我仍然可以包括它?
我從來沒有真正使用過浮油之前的關聯,所以有點困惑。
如果我有一個案例類,看起來像:我的案例類是否有我的關聯集合?
case class User(id: Int, name: String, addresses: Seq[Address])
case class Address(id: Int, userId: Int, name: String)
我應該或刪除用戶地址屬性時,我使用光滑我仍然可以包括它?
我從來沒有真正使用過浮油之前的關聯,所以有點困惑。
因此,Slick不支持像hibernate這樣的嵌套對象。如果你非常想要嵌套對象模型,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
表建立用戶和地址之間的關聯。因此,對於一個用戶,你可以在用戶地址表中的一個或多個地址的IDS(模擬一個典型的關係型數據庫的方式來實體之間一對多的關係)
UserAddresses捕捉用戶之間的一對多關係和地址
請注意,上面的設計看起來像典型的數據庫設計,人們會選擇在一對多關係的情況下進行設計。在Slick中,這些模型表示關係表。所以,對於每個表格,我們需要有一個代表該表格的模型。 Slick可以幫助您編寫不可疑的,可組合的,可重複使用的,類型安全的和scala集合,如查詢。因此,一天結束Slick代碼看起來像Scala集合操作代碼。
我希望我沒有說明明顯的(IDK你的編程背景)。這些是你想要的對象類(在你的應用程序中)。大多數關係數據庫不支持對象,它們使用行操作,而且是平坦的。這意味着表示數據庫中行的Slick類必須是平坦的(沒有序列,樹等)。 –
您顯示的關係是1:N(一個用戶有很多地址)。所以你會做一個完整的連接(如果用戶必須至少有一個地址)或左連接(如果它可以有零個或多個地址)。然後你可以通過'User'獲得'Seq [(User,Address)]'=>組,並且讓你的域對象像你指定的一樣。有關更多詳細信息,請參閱[這裏](http://olivebh.com/scala-play-slick.html)。 –
以下是有關浮動建模的更多信息http://youtube.com/watch?v=ciyjJLYIySY – pamu