2017-01-01 40 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(一個用戶有很多地址)。所以你會做一個完整的連接(如果用戶必須至少有一個地址)或左連接(如果它可以有零個或多個地址)。然後你可以通過'User'獲得'Seq [(User,Address)]'=>組,並且讓你的域對象像你指定的一樣。有關更多詳細信息,請參閱[這裏](http://olivebh.com/scala-play-slick.html)。 –

+0

以下是有關浮動建模的更多信息http://youtube.com/watch?v=ciyjJLYIySY – pamu

回答

2

油滑不是ORM

因此,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集合操作代碼。

+0

所以我需要創建3個光滑的表對象,然後將UserAddresses視爲另一個表? – Blankman

+0

@Blankman是的。它就像關係數據庫設計一樣。 – pamu

+0

在scala中有JPA嗎?我嘗試了anorm,光滑的scalalikejdbc。 (((( – Sergey

相關問題