gpt4 book ai didi

scala - 用 squeryl 存储案例对象

转载 作者:行者123 更新时间:2023-12-01 12:50:03 26 4
gpt4 key购买 nike

如何使用 squeryl 存储用户案例对象?我有一个 Account 对象,其权限字段类型为 Permission(定义为密封特征)。我还有 2 个案例对象(Administrator 和 NormalUser)从 Permission 扩展而来。如何使用 Squeryl 保留 Account 类。示例代码如下:

sealed trait Permission
case object Administrator extends Permission
case object NormalUser extends Permission

case class Account(
id: Long,
email: String,
permission: Permission
) extends KeyedEntity[Long]

最佳答案

扩展我的评论,如果您使用自定义类型来检索权限类型,使其作为整数保存到数据库(在下面的示例中为 1 和 0),您可以覆盖 unapply 方法来查找大小写对象和模式匹配应该可以正常工作。我想像下面这样的东西应该有效:

class Permission(identifier:Int) extends org.squeryl.customtypes.IntField(identifier) {
self: CustomType[Int] =>

private lazy val permissions =
List(Administrator, NormalUser).
map(p => p.value -> p).
toMap

def unapply = permissions.get(value)
}

case object Administrator extends Permission(1)
case object NormalUser extends Permission(0)

然后您应该能够使用您的实体定义将权限直接存储在您的代码中:

case class Account(
id: Long,
email: String,
permission: Permission
) extends KeyedEntity[Long]

您可以将permission 字段直接设置为AdministratorNormalUser,您还应该能够像这样进行模式匹配:

account.permission match {
case Administrator => ..
case NormalUser => ..
}

关于scala - 用 squeryl 存储案例对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219104/

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