我有类似的问题!您必须定义形状!在的帮助下文档 http://slick.lightbend.com/doc/3.1.0/userdefined.html#monomorphic-case-classes我设法通过“轻型”案例类工作来实现该方法。
首先,定义更简单的类:
case class AuditResultLight(
ProcessorId: Long,
DispatchedTimestamp: Timestamp,
IsSuccessful: Boolean,
AuditResultId: Long = 0L
)
然后,您需要创建案例类的提升版本:
case class AuditResultLightLifted(
ProcessorId: Rep[Long],
DispatchedTimestamp: Rep[Timestamp],
IsSuccessful: Rep[Boolean],
AuditResultId: Rep[Long]
)
另外,您需要一个隐式对象(形状) 告诉 slick 如何将一个映射到另一个:
implicit object AuditResultLightShape
extends CaseClassShape(AuditResultLightLifted.tupled, AuditResultLight.tupled)
现在,您可以定义一个返回 AuditResultLight 的查询(不完全是投影,但据我了解,它的工作原理类似):
val auditResultsLight = auditResults.map(r => AuditResultLightLifted(r.ProcessorId, r.DispatchedTimestamp, r.IsSuccessful, r.AuditResultId))
然后,您可以定义以简单形式返回失败审核的函数:
def getRecentFailedAuditsQuery(): Query[AuditResultTable, AuditResultLight, Seq] = {
auditResultsLight.filterNot(r => r.isSuccessful)
}
代码要点:https://gist.github.com/wjur/93712a51d392d181ab7fc2408e4ce48b https://gist.github.com/wjur/93712a51d392d181ab7fc2408e4ce48b
代码编译并执行,但就我而言,问题是我的 IDE (IntelliJ) 报告Query[Nothing, Nothing, scala.Seq]
键入:auditResultsLight
。每当我使用时都会出现语法错误auditResultsLight
并引用一个字段AuditResultLight
在查询中。然而,正因为如此,最终我决定使用您建议的第二种方法(带有抽象表的方法)。代码量几乎相同,但有 IDE 支持。