Slick 3.0保存具有关系的对象(一对一或多对一)

时间:2015-10-14 13:36:18

标签: java scala orm slick slick-3.0

我有以下代码,例如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的新手:-)

0 个答案:

没有答案