如何使用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]
答案 0 :(得分:4)
扩展我的注释,如果您使用自定义类型来检索权限类型,以便它作为整数持久存储到数据库中(在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
字段直接设置为Administrator
或NormalUser
,您还应该能够将匹配模式设置为:
account.permission match {
case Administrator => ..
case NormalUser => ..
}
答案 1 :(得分:0)
您需要定义架构:
object Library extends Schema {
val authors = table[Author]("AUTHORS")
}
然后插入实体:
authors.insert(new Author("Herby Hancock"))
http://squeryl.org/schema-definition.html
http://squeryl.org/inserts-updates-delete.html
为了存储Permission,它必须在包中继承CustomType的一个子类型 org.squeryl.customtypes,并导入org.squeryl.customtypes.CustomTypesMode._ 进入定义语句的范围。有关详细信息,请参阅此处的自定义类型部分:http://squeryl.org/schema-definition.html