2014-02-09 10 views
8

Ich versuche, Slick mit einer Spalte zu verwenden, die einen benutzerdefinierten Typ (eine Aufzählung) hat. Alles funktioniert, bis ich versuche, eine Abfrage zu schreiben, die die Spalte verwendet.Scala Slick Abfrage Vergleich eines benutzerdefinierten Benutzertyps (Enumeration) gibt Fehler

Beim Kompilieren ich einen Fehler auf dem folgenden Verfahren erhalten:

def findCredentials(credentialType:CredentialType)(implicit session: Session): List[Credential] = { 
    val query = for { 
     c <- credentials if c.credentialType === credentialType 
    } yield c 
    query.list 
} 

Hier ist der Fehler:

[error] ... value === is not a member of   
scala.slick.lifted.Column[models.domain.enumeration.CredentialType.CredentialType] 
[error]  c <- credentials if c.credentialType === credentialType 

Der Code Aufzählung ist hier:

object CredentialType extends Enumeration { 
    type CredentialType = Value 
    val Password, Token = Value 
} 

Die Tabellendefinition ist hier:

case class Credential(id: Long, userId: Long, credentialType: CredentialType) 

class Credentials(tag: Tag) extends Table[Credential](tag, "credential") { 
    implicit val credentialTypeColumnType = MappedColumnType.base[CredentialType, String](
    { c => c.toString }, 
    { s => CredentialType.withName(s)} 
) 
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc) 
    def userId = column[Long]("user_id") 
    def credentialType = column[CredentialType]("type") 
    def * = (id, userId, credentialType) <> (Credential.tupled, Credential.unapply) 
} 

Ich habe eine Reihe anderer Fragen gegooglet, aber sie sind entweder nicht für Slick 2.x.x oder beinhalten keine Enumerationstypen.

Meine Frage ist, muss ich den Operator === irgendwo für Aufzählungstypen definieren, oder gibt es einen einfacheren Weg mit der aktuellen Slick 2.0.0 Funktionalität, die ich vermisse?

Dank

Antwort

15

Ich glaube, Sie den impliziten Typ Mapper in Umfang benötigen, wenn Sie den === Operator. Sie sollten die

irgendwo, wo es sichtbar ist, wenn Sie die Abfrage erstellen.

+0

Danke, das hast du gemacht ... Ich habe versucht, dich zu wählen, aber ich habe noch nicht genug Punkte, um das zu tun :-) – SkydivingCoder