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

相关问题