【发布时间】:2019-11-29 06:26:38
【问题描述】:
我想进行这样的查询:
- 查询特定日期的记录;
- 如果 (1) 失败,则查询某个日期范围内的记录,取最后一个日期。
我现在的处理方式是:
lazy val specific: Future[Option[QueryResponse]] = // some database call
lazy val range: Future[Option[QueryResponse]] =
// some database call returning Future[Seq[QueryResponse]]
.map { qrs =>
if (qrs.nonEmpty) Some(qrs.maxBy(_.date)(_ compareTo _))
else None
}
for {
s <- specific
r <- range
} yield {
(s, r) // match on combination of Some/None
}
两个问题:
- 惰性会阻止评估数据库调用吗?我希望尽可能少地拨打电话。这与其他任何问题一样都是语言问题。
- 认识到无论如何都必须进行 1 次数据库调用,最好对一个范围进行调用,然后在 POJO 上进行本地过滤以查找最新日期,对吗?
【问题讨论】: