gpt4 book ai didi

scala - 如何使用 Anorm 管理 Scala 枚举?

转载 作者:行者123 更新时间:2023-12-02 01:48:12 25 4
gpt4 key购买 nike

我想通过使用枚举来创建用户角色(认为这是最好的主意)。

我该如何处理?

我当前的代码如下所示:

object UserRole extends Enumeration {
type UserRole = Value
val admin, user, manager = Value
}
case class User(id: Long, firstname: String, lastname: String, password: String, email: String, role: UserRole)

那么我应该如何定义用户“简单”:

val simple = {
get[Long]("user.id") ~
get[String]("user.firstname") ~
get[String]("user.lastname") ~
get[String]("user.password") ~
get[String]("user.email") ~
get[UserRole]("user.role") map {
case id~firstname~lastname~password~email~role => User(id, firstname, lastname, password, email, role)
}
}

我应该如何将它保存到数据库?

CREATE TABLE user (
id integer NOT NULL DEFAULT nextval('user_id_seq'),
firstname varchar(60),
lastname varchar(60),
password varchar(255),
email varchar(60),
role varchar(40)
);

最佳答案

Anorm 不支持 Scala 枚举(在我看来,Scala 枚举非常糟糕)。我通常做的是创建另一个具有自己的解析器和表空间的案例类,并将其JOIN 到相关查询。 UserRole 可以在 User 中解析,方法是将其组合在 User.simple 中。

case class UserRole(id: Long, name: String)

object UserRole {
val simple: RowParser[UserRole] = {
get[Long]("roles.id") ~
get[String]("roles.name") map {
case id~name => UserRole(id, name)
}
}
}

case class User(id: Long, firstname: String, lastname: String, password: String, email: String, role: UserRole)

object User {

val simple: RowParser[User] = {
get[Long]("user.id") ~
get[String]("user.firstname") ~
get[String]("user.lastname") ~
get[String]("user.password") ~
get[String]("user.email") ~
UserRole.simple map {
case id~firstname~lastname~password~email~role =>
User(id, firstname, lastname, password, email, role)
}
}

}

关于scala - 如何使用 Anorm 管理 Scala 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com