Привет всем!
Бывалые скалисты, подскажите как реализовываются связи many-to-many при использовании anorm.
Есть три таблицы: users, permissions и user_permissions. user относится к permissions как многие ко многим.
Есть отдельные парсеры для маппинга данных в объекты User и Permission. Вопрос, как реализовать anorm-парсер для объекта UserWithPermissions?
Пока имею конструкцию следующего вида.
case class UserWithPermissions(
id: Int,
username: String,
email: String,
uid: Option[String],
password: String,
first_name: Option[String],
last_name: Option[String],
avatar: Option[String],
created: DateTime = DateTime.now,
last_visited: Option[DateTime],
is_activated: Boolean = false,
is_admin: Boolean = false,
permissions: List[Permission]
)
trait UserWithPermissionsSerialize {
val writes = {
get[Int]("id") ~
get[String]("username") ~
get[String]("email") ~
get[Option[String]]("uid") ~
get[String]("password") ~
get[Option[String]]("first_name") ~
get[Option[String]]("last_name") ~
get[Option[String]]("avatar") ~
get[DateTime]("created") ~
get[Option[DateTime]]("last_visited") ~
get[Boolean]("is_activated") ~
get[Boolean]("is_admin") ~
get[List[Permission]]("permissions") map {
case id ~ username ~ email ~ uid ~ password ~ first_name ~ last_name ~ avatar ~ created ~ last_visited ~ is_activated ~ is_admin ~ permissions => UserWithPermissions(
id,
username,
email,
uid,
password,
first_name,
last_name,
avatar,
created,
last_visited,
is_activated,
is_admin,
permissions
)
}
}
}
object UserWithPermissions extends UserWithPermissionsSerialize
Но такая конструкция не работает. Я так понимаю, надо как-то подставить парсер для permissions в парсер UserWithPermission. Но как - не знаю... Имел ли кто-нибудь аналогичный опыт работы с anorm и межобъектными связями?