scala – Slick选择id行
发布时间:2020-12-16 09:00:21 所属栏目:安全 来源:网络整理
导读:按id选择一行应该是一件简单的事情,但是我在弄清楚如何将它映射到我的对象时遇到了一些麻烦. 我发现this question正在寻找相同的东西,但给出的答案对我不起作用. 目前我有这个工作,但它似乎并不像它应该的那样优雅. def getSingle(id: Long):Option[Category
按id选择一行应该是一件简单的事情,但是我在弄清楚如何将它映射到我的对象时遇到了一些麻烦.
我发现this question正在寻找相同的东西,但给出的答案对我不起作用. 目前我有这个工作,但它似乎并不像它应该的那样优雅. def getSingle(id: Long):Option[Category] = withSession{implicit session => (for{cat <- Category if cat.id === id} yield cat ).list.headOption //remove the .list.headOption and the function will return a WrappingQuery } 我觉得得到一个列表然后采取headOption是笨重和不必要的.我肯定错过了什么. 如果它有帮助,这里有更多我的类别代码 case class Category( id: Long = 0L,name: String ) object Category extends Table[Category]("categories"){ def name = column[String]("name",O.NotNull) def id = column[Long]("id",O.PrimaryKey,O.AutoInc) def * = id ~ name <> (Category.apply _,Category.unapply _) ... } 有没有更简单的方法来使用Slick从ID获取Option [T]? 解决方案有一个驱动程序问题.我不能使用.firstOption但升级到mysql jdbc 5.1.25并且一切都很好! 解决方法
你可以这样做:
def getSingle(id: Long):Option[Category] = withSession{implicit session => Query(Category).where(_.id === id).firstOption } 如果您经常使用此查询,那么您应该考虑QueryTemplate: val byId = t.createFinderBy(t => t.id) 这将创建一个预编译的预准备语句,您可以在方法中使用它 def getSingle(id:Long):Option [Category] ??= byId(id).firstOption (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |