scala - 映射查询值后的Scala Slick过滤器
问题描述
在按 ID 进行 Slick 查询之前,有没有办法转换 id(从外部哈希到数据库主键 id)。对于其他灵活的查询,我可以覆盖案例类应用/取消应用以映射外部和内部 ID。但是,当使用 filter() 按 ID 查询时,我不知道在调用 filter 之前没有映射的任何方式。
val res = items.filter(i => i.id === itemId)
这里的 itemId 是外部可见的 ID,而不是存储在数据库中的 id 值。想知道是否可以扩展 TableQuery 并在调用过滤器之前更改 id 值。
希望这个问题有意义。
解决方案
你可以这样做:
type ItemId = String
implicit def ItemIdToRepInt(itemId: ItemId): Rep[Int] = {
itemId.toInt*2 // We let the implicit conversion provided by slick from Int to Rep[Int] occur here
}
val itemId: ItemId = "1"
db.run(MyTable.filter(i => i.id === itemId).result) //will filter on id = 2
希望这对你有意义:-)
此外,如果 ItemId 实际上是 Int,您需要更准确地从 Item 转换为 Rep[Int] 否则您将进入隐式转换的无限循环。
推荐阅读
- oracle - 从 Oracle sqlplus 中的 shell 脚本将大字符串插入到列类型 CLOB
- javascript - JSON数据未从控制器返回以查看?
- ios - 需要 Google Mobile Ads SDK 常量的值
- python - 如何修复彩色图像中的虚线?
- javascript - 自动滚动聊天窗口
- c# - 我可以绑定到每个 DataGridRow 的背景颜色吗?
- django - 如何在 Django 上为视频文件创建一次性链接
- visual-studio - 与 Visual Studio 相比,VS Code 中的字体看起来更清晰
- ruby - 将尽可能多的代码行移出 main 尽可能
- javascript - 如何控制“插入符号导航/文本插入光标”在可编辑 div 中的文本内的位置?