【问题标题】:Using database functions in Slick table definitions - how?在 Slick 表定义中使用数据库函数 - 如何?
【发布时间】:2015-04-15 17:53:14
【问题描述】:

有没有人成功地使用 Slick(我目前使用的是 3.0.0-RC3,最新的可用版本)来生成包含特定于 DB 的函数的表定义?如果可以,如何实现?

示例:我在 Postgres 中有一个列,其定义如下:

"request_date" timestamp default now(),

我尝试(未成功)在 Slick DDL 中描述。

第一次尝试:

def requestDate = column[Option[DateTime]]("request_date", O Default "now()")

当然,这被拒绝了:

[error] <path-to-file>: type mismatch;
[error]  found   : String("now()")
[error]  required: Option[org.joda.time.DateTime]
[error]     def requestDate = column[Option[DateTime]]("request_date", O Default "now()")

好的,我已经尝试定义一个 SimpleFunction(我已经有了 DateTime 转换器):

val dbNow = SimpleFunction.nullary[DateTime]("now")
def requestDate = column[Option[DateTime]]("request_date", O Default dbNow)

产生了另一个错误:

[error] <path-to-file>: type mismatch;
[error]  found   : slick.lifted.Rep[org.joda.time.DateTime]
[error]  required: Option[org.joda.time.DateTime]
[error]     def requestDate = column[Option[DateTime]]("request_date", O Default dbNow)

我也尝试过SimpleLiteral[DateTime]("now()"),导致了类似的错误。 (删除选项也没有帮助)。

任何想法将不胜感激。有点郁闷,这么简单的东西好像不太容易搞定……

【问题讨论】:

    标签: postgresql scala slick slick-3.0


    【解决方案1】:

    目前不支持:https://github.com/slick/slick/issues/214。您需要使用普通 SQL 相应地更改您的表

    【讨论】:

    • 我明白了。感谢您的链接-那里确实是老问题,看起来不会很快解决。叹息。
    • 从 Slick Table 类生成 DDL 不一定是个好主意。你只能做一次。迁移需要在 SQL 中进行。为什么不从一开始就在 SQL 中做模式的东西,包括最初的 DDL 并使用代码生成来代替?
    • 我们确实做到了。 (使用flywaydb)。这是一个更令人好奇的问题。
    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2010-12-26
    • 1970-01-01
    • 2015-07-30
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多