Slick

2013-06-15 9 views
6

में टाइप मैप किए गए कॉलम के साथ पूछताछ आप SLICK में यह प्रश्न कैसे लिखेंगे?Slick

DB.withSession { 
    implicit session => 
    Tokens.where(_.expirationTime < DateTime.now).delete 
} 

DateTime.now प्रकार का है org.joda.time.DateTime

और _.expirationTime एक ही प्रकार का एक प्रकार मैप किया स्तंभ है।

मैं यह त्रुटि

[error] UserService.scala:80: value < is not a member of scala.slick.lifted.Column[org.joda.time.DateTime] 
[error]   Tokens.where(_.expirationTime < DateTime.now).delete 
[error]          ^
[error] one error found 

इस रूप में क्वेरी के साथ अभी मिलता है।

उत्तर

4

मेरा अनुमान है कि जोडाटाइम प्रकार स्लिक के लिए बॉक्स से बाहर समर्थित प्रकार नहीं हैं। यदि आपने उस कॉलम को java.sql.Timestamp पर बदल दिया है और Timestamp का उपयोग अपने तुलना मूल्य के रूप में किया है, तो चीजें काम करती हैं। आप Joda प्रकार का उपयोग करने के लिए अपने चालाक स्तंभ मैपिंग में चाहते हैं, तो आप इस पर गौर करना चाह सकते हैं:

https://github.com/tototoshi/slick-joda-mapper

1

com.github.tototoshi.slick.JodaSupport._ आयात कर रहा है मेरे लिए समस्या तय।

1

मुझे क्या करना होगा:

की है कि अपने टोकन वर्ग इस तरह दिखता है मान लेते हैं और आप mysql का उपयोग करने वाले दो:

import org.joda.time.DateTime 
import com.github.tototoshi.slick.JdbcJodaSupport._ 
import play.api.db.slick.Config.driver.simple._ 

case class Token(
        id: Option[Long] 
        expirationTime: Option[DateTime]     
       ) 

class Tokens(tag: Tag) extends Table[Token](tag, "Token") { 
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc, O.Nullable) 
    def expirationTime = column[DateTime]("expirationTime", O.Nullable) 

    def * = (id.?, expirationTime.?) <> (Token.tupled, Token.unapply) 

} 

उदा। निर्भरता:

libraryDependencies ++= Seq(
    "com.typesafe.slick" %% "slick" % "2.1.0-M2", 
    "com.typesafe.play" %% "play-slick" % "0.8.0-M1", 
    "com.github.tototoshi" %% "slick-joda-mapper" % "1.2.0", 
    "mysql" % "mysql-connector-java" % "5.1.26" 
) 

फिर तुम सब करने की जरूरत है:

import com.github.tototoshi.slick.JdbcJodaSupport._ 


DB.withSession { 
    implicit session => 
    Tokens.where(_.expirationTime < DateTime.now).delete 
} 

आप mysql के अलावा कोई अन्य डाटाबेस का उपयोग करते हैं तो आप अपने आयात और निर्भरता को बदलने की जरूरत है।

संबंधित मुद्दे