在按ID执行Slick查询之前,有没有办法将id(从外部哈希值转换为数据库主键id)转换。对于其他光滑的查询,我可以覆盖案例类apply / unapply以在外部和内部ID之间进行映射。但是,当使用filter()通过ID查询时,在调用filter之前,我不知道没有映射的任何方法。
val res = items.filter(i => i.id === itemId)
这里itemId是外部可见ID,而不是存储在数据库中的id值。想知道TableQuery是否可以扩展并在调用filter之前更改id值。
希望这个问题有道理。
答案 0 :(得分:1)
您可以这样做:
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],否则您将进入无限循环的隐式转换。