如何使用squeryl存储用例对象?我有一个Account对象,它有一个permission类型的Permission字段(定义为一个密封特征)。我还有两个案例对象(管理员和NormalUser)从权限扩展。如何使用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]发布于 2012-11-06 05:11:38
根据我的评论展开,如果您使用自定义类型来检索权限类型,以便它作为整数(在下面的示例中为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 => ..
}发布于 2012-11-04 22:34:54
您需要定义模式:
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
为了存储权限,它必须继承org.squeryl.customtypes包中CustomType的一个子类型,并将org.squeryl.customtypes.CustomTypesMode._导入到定义语句的作用域。有关详细信息,请阅读此处的自定义类型部分:http://squeryl.org/schema-definition.html
https://stackoverflow.com/questions/13219104
复制相似问题