如果我有一个案例类,看起来像:我的案例类是否有我的关联集合?
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