3

squerylを使用してユーザーケースオブジェクトを保存するにはどうすればよいですか?タイプPermission(封印されたトレイトとして定義)のパーミッションフィールドを持つAccountオブジェクトがあります。また、Permissionから拡張された2つのケースオブジェクト(Administratorと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]
4

2 に答える 2

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 => ..
}
于 2012-11-05T21:11:38.133 に答える
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

パーミッションを保存するには、パッケージorg.squeryl.customtypesのCustomTypeのサブタイプの1つを継承し、ステートメントが定義されているスコープにorg.squeryl.customtypes.CustomTypesMode._をインポートする必要があります。詳細については、ここのカスタムタイプのセクションをお読みください:http ://squeryl.org/schema-definition.html

于 2012-11-04T14:34:53.680 に答える