I mit Scala 2.10 Slick 2.1.0 verwenden. Ich habe ein Wertobjekt (EMail
), die ich in eine Spalte VARCHAR
kartieren.Slick wählen Wert-Objekt (ausfahrende AnyVal)
object EMail {
import java.util.regex.Pattern
val emailRegex = Pattern.compile("^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE)
val empty = EMail("[email protected]")
}
case class EMail(value: String) extends AnyVal with MappedTo[String] {
def isValid: Boolean = EMail.emailRegex.matcher(value).find
def validate: EMail = {
assert(isValid)
EMail(value.trim.toLowerCase)
}
override def toString = validate.value
}
Die Column
Definition lautet:
def email = column[Option[EMail]]("email_address")
Dies ist mein Versuch, einen Sucher zu schreiben:
def findByEmail(email: Option[EMail]): Option[User] =
database.withSession { implicit session: Session =>
queryAll.filter(e => e.email.isDefined && e.email === email).firstOption
}
Dies ist die Fehlermeldung erhalte ich:
[error] Users.scala:52: ambiguous implicit values: [error] both value BooleanCanBeQueryCondition in object CanBeQueryCondition of type => scala.slick.lifted.CanBeQueryCondition[Boolean] [error] and value BooleanOptionColumnCanBeQueryCondition in object CanBeQueryCondition of type => scala.slick.lifted.CanBeQueryCondition[scala.slick.lifted.Column[Option[Boolean]]] [error] match expected type scala.slick.lifted.CanBeQueryCondition[Nothing] [error] queryAll.filter(_.email === email.map(_.value)).firstOption [error] ^
I habe entdeckt, dass du richtig bist. https://github.com/mslinn/slick_2.1.0_mappings/blob/master/src/main/scala/App.scala Ich hatte gedacht, diesen Beitrag zu löschen –