2013-02-21 6 views
3

По какой-то причине в моем случае даже простая декларация таблицы Slick не работает. Я использую slick 2.10 (1.0.0), который является последним из центрального хранилища maven.Почему пятнистые выступы не работают

case class DeviceType(id: Option[Int] = None, name: String, version: String) 

object DeviceTypes extends Table[DeviceType]("device_types") { 

    def id = column[Int]("id", O.PrimaryKey, O.AutoInc) 
    def name = column[String]("name", O.NotNull) 
    def version = column[String]("version") 

    def * = id.? ~ name ~ version <> (DeviceType, DeviceType.unapply _) 


    def delete(device_type: DeviceType): Unit = { 
database withSession { implicit session : Session => 
    val dt_query = for(dt <- DeviceTypes if dt.id == device_type.id.get) yield dt 
    //Query(DeviceTypes).filter(_.id == device_type.id.get) 
    dt_query.delete 
} 
    } 
} 

[warn] /home/salil/Scala/sd_ventures/app/models/DeviceType.scala:38: scala.slick.lifted.Column[Int] and Int are unrelated: they will most likely never compare equal 
[warn]  val dt_query = for(dt <- DeviceTypes if dt.id == device_type.id.get) yield dt 
[warn]       ^

And if I use Query class directly, I get the same warning: 
[warn] /home/salil/Scala/sd_ventures/app/models/DeviceType.scala:38: scala.slick.lifted.Column[Int] and Int are unrelated: they will most likely never compare equal 
[warn]  val dt = Query(DeviceTypes).filter(_.id == device_type.id.get) 
[warn]            ^

Может кто-нибудь сказать мне, почему он не работает?

ответ

10

В Slick вы должны использовать «===» для проверки равенства.

val dt_query = for(dt <- DeviceTypes if dt.id === device_type.id.get) yield dt 

Ref: в нижней части http://slick.typesafe.com/doc/1.0.0/gettingstarted.html

+0

Ой, не знаю, что. Огромное спасибо. – Salil

+0

Это не работает для строк - по крайней мере, в версии 1.0.1-RC1. Сравнение 'val q = for {u <- User, если u.name === username} дает u', никогда не будет равным –