scala – 如何在Slick中定义可选外键?
发布时间:2020-12-16 19:21:28 所属栏目:安全 来源:网络整理
导读:我有这样一张桌子: object Addresses extends Table[AddressRow]("address") { def id = column[Int]("id",O.PrimaryKey,O.AutoInc) def street = column[String]("street") def number = column[String]("number") def zipcode = column[String]("zipcode"
我有这样一张桌子:
object Addresses extends Table[AddressRow]("address") { def id = column[Int]("id",O.PrimaryKey,O.AutoInc) def street = column[String]("street") def number = column[String]("number") def zipcode = column[String]("zipcode") def city = column[String]("city") def country = column[String]("country") def geoLocationId = column[Int]("geo_location_id",O.Nullable) // Foreign keys. def geoLocation = foreignKey("fk_geo_location",geoLocationId,GeoLocations)(_.id) // Rest of my code. ... } 我的案例类是: case class AddressRow( id: Option[Int] = None,street: String,number: String,zipcode: String,city: String,country: String,geoLocationId: Option[Int]) 你注意到geoLocation是一个可选的外键…. 我找不到任何方法来在我的外键定义中描述这个“可选”. 我尝试过: def geoLocation = foreignKey("fk_geo_location",geoLocationId.asColumnOf[Option[Int]],GeoLocations)(_.id) 但我收到:
有人有建议吗? 解决方法
我不认为您尝试做的事情是通过使用外键可以实现的.
从Slick文档中查看 joining和 user defined types. 请注意leftJoin的示例: val explicitLeftOuterJoin = for { (c,s) <- Coffees leftJoin Suppliers on (_.supID === _.id) } yield (c.name,s.name.?) 因此,如果您想查询所有地址,则需要从类似的地方开始 val addressGeolocQuery = for { (addr,loc) <- Addresses leftJoin GeoLocations on (_.geoLocationId === _.id) } yield addr.id ~ loc.prop1.? ~ loc.prop2.? /*and so on*/ 然后,您可以映射该查询的结果,以便返回实际的Address实例,并使用Option [GeoLocation]完成.这就是为什么我将文档中的“用户定义类型”链接起来……这对我来说是一个新功能(我熟悉ScalaQuery,这是Slick之前的版本),但它看起来相当有前途. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |