我有以下代码,例如user和userAddress,这是一对一或多对一的关系。
case class User(id: Long, name: String, addressId: Long)
case class Address(id: Long, street: String)
class UserTable(tag: Tag) extends Table[User](tag, "USERS") {
def id = ???
def name = ???
def addressId = ???
def * = ???
}
class AddressTable(tag: Tag) extends Table[Address](tag, "ADDRESS") {
def id = ???
def street = ???
def * = ???
}
我想用地址保存用户并返回用户ID,我写的代码如下:
val users = TableQuery[UserTable]
val addresses = TableQuery[AddressTable]
def saveUserWithAddress(user: User, address: Address): Future[Long] = {
val insertion = (for {
a <- (addresses returning addresses.map(_.id)) += address
u <- (users returning users.map(_.id)) += (user.copy(addressId = a))
} yield u).transactionally
db.run(insertion)
}
我想在此处进行交易的原因是我想将它们保存在一个交易中。
我能问一下保存关系对象的正确方法吗?或者有什么简短的方法可以做到这一点?由于我来自Hibernate ORM背景,并且很容易实现,只需session.save(user)
即可完成。
如果您觉得以其他方式做起来太容易了,请耐心等待,因为我是Scala和Slick的新手:-)