【问题标题】:How to convert Rep[T] to T in slick 3.0?如何在 slick 3.0 中将 Rep[T] 转换为 T?
【发布时间】:2015-07-24 14:56:55
【问题描述】:

我使用了一个从 slick 代码生成器生成的代码。

我的表有超过 22 列,因此它使用 HList

它生成1个类型和1个函数:

type AccountRow
def AccountRow(uuid: java.util.UUID, providerid: String, email: Option[String], ...):AccountRow

如何从生成的代码编写编译后的插入代码?

我试过了:

val insertAccountQueryCompiled = {

def q(uuid:Rep[UUID], providerId:Rep[String], email:Rep[Option[String]], ...) = Account += AccountRow(uuid, providerId, email, ...)

Compiled(q _)
}

我需要将 Rep[T] 转换为 T 才能使 AccountRow 函数正常工作。我该怎么做?

谢谢

【问题讨论】:

标签: slick slick-3.0


【解决方案1】:

;TLDR;不可能

说明

Slick 中有两个抽象级别:Querys 和 DBIOActions。

当您处理Querys 时,您必须访问您的架构定义和行,Reps,而且基本上,它非常受限制,因为它是最接近您实际数据库的抽象级别使用。 Rep 指的是数据库中的假设值,而不是您的程序中的值。

然后你有 DBIOActions,它是下一个级别......不仅仅是查询的一些定义,而是它的执行。从查询中获取信息时,您通常会得到 DBIOActions,例如使用 result 方法或(TADAN!)插入行时。

Inserts 和 Updates 不是查询,因此您尝试执行的操作是不可能的。您正在处理 DBIOAction(+= 方法)和Query 东西(Rep 类型)。在 DBIOAction 中获取 Rep 的唯一方法是执行 Query 并获取 DBIOAction,然后使用 flatMap 或 for comprehensions(相同)组合两个 Action。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2016-02-29
    • 2019-06-13
    • 2010-11-18
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多