【问题标题】:No implicit Ordering defined for scala.slick.lifted.ColumnOrdered[Long]没有为 scala.slick.lifted.ColumnOrdered[Long] 定义隐式排序
【发布时间】:2014-07-09 14:48:22
【问题描述】:

我通过 play 插件使用 slick 2.0,以下是我的表映射

class Tasks(tag: Tag) extends Table[Task](tag, "Tasks"){
    def id   = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
    def txt  = column[String]("txt")
    def done = column[Boolean]("done")
    def * = (id, txt, done) <> (Task.tupled, Task.unapply)
}

然后,我像这样创建了 TableQuery 对象

val tasks = TableQuery[Tasks]

我使用tasks.list 来获取正确返回的List[Task] 但是当我想使用 tasks.list.sortBy(_.id.get.desc) 对结果进行排序时 我收到了这个错误

没有为 scala.slick.lifted.ColumnOrdered[Long] 定义隐式排序。

有什么想法吗?

【问题讨论】:

    标签: scala slick-2.0


    【解决方案1】:

    你必须先排序,然后调用.list()

    tasks.sortBy(_.id.desc).list()
    

    当调用 list() 时,您正在执行调用程序,而在 sql 级别添加排序为时已晚,当然您始终可以使用列表 sortBy 方法对返回的集合进行排序。

    【讨论】:

    • 谢谢。那讲得通。顺便说一句,我遇到了另一个错误Caught exception while computing default value for Rep[Option[_]].getOrElse -- This cannot be done lazily when the value is needed on the database side
    • 似乎 .get 导致了问题。我删除了它并且它有效。非常感谢。
    • 是的,不应该使用.get,即使字段是Option,Slick 也可以订购。
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多