Мы используем UUID для столбца ID, и они генерируются в коде Scala, а не в базе данных. Я не знаю, как это будет работать с вашим «шаблоном активной записи», но это хорошо, потому что вы можете связать объекты сколько хотите, прежде чем обращаться к базе данных. Я также предпочитаю этот тип Id[T]
в пользу отдельных типов, таких как BookId
и AuthorId
.
case class Id[+T](value: String) extends MappedTo[String]
case object Id {
def generate[T]: Id[T] = Id[T](java.util.UUID.randomUUID().toString)
}
case class Author(authorId: Id[Author], name: String)
case class Book(authorId: Id[Book], title: String, authorId: Id[Author])
val newAuthor = Author(Id.generate, "JK Rowling")
val newBook = Book(Id.generate, "Harry Potter", newAuthor.id)
// do other stuff?
val action = for {
_ <- authorDao.insert(newAuthor)
_ <- bookDao.insert(newBook)
} yield 1
db.run(action.transactionally)
Надеюсь, это поможет.