【问题标题】:Discard values while inserting and updating data using slick使用 slick 插入和更新数据时丢弃值
【发布时间】:2015-01-10 17:16:57
【问题描述】:

我在 play2 中使用slick。 我在数据库中有多个由数据库管理的字段。我不想创建或更新它们,但是我想在读取值时获取它们。

例如,假设我有

case class MappedDummyTable(id: Int, .. 20 other fields, modified_time: Optional[Timestamp])

在数据库中映射Dummymodified_time 由数据库管理。

问题是在insertupdate 期间,我创建了一个MappedDummyTable 的实例,没有修改时间属性并将其传递给slick 以进行创建/更新之类的

TableQuery[MappedDummyTable].insert(instanceOfMappedDummyTable)

为此,Slick 将查询创建为


Insert INTO MappedDummyTable(id,....,modified_time) Values(1,....,null)

并将 modified_time 更新为 NULL,这是我不想要的。我希望 Slick 在更新和创建时忽略这些字段。

为了更新,我可以做

TableQuery[MappedDummyTable].map(fieldsToBeUpdated).update(values)

但这会导致 map 方法中有 20 个奇怪的字段,看起来很难看。

有没有更好的办法?

更新:

我发现的最佳解决方案是使用多重投影。我创建了一个投影来获取值,另一个来更新和插入数据

【问题讨论】:

    标签: scala playframework-2.0 slick


    【解决方案1】:

    如果你不想写row => (row.id,...other 20 fields)之类的代码,也许你需要在表中写一些触发器

    或者尝试使用None 而不是null

    【讨论】:

    • None 被 slick 转换为 null
    【解决方案2】:

    我相信映射非默认字段的解决方案是使用 Slick 的唯一方法。为了使它不那么难看,您可以在 MappedDummyTable 上定义函数 ignoreDefaults ,它将仅返回非默认值和函数在返回投影的 MappedDummyTable 案例类的伴随对象中

    TableQuery[MappedDummyTable].map(MappedDummyTable.ignoreDefaults).insert(instanceOfMappedDummyTable.ignoreDefaults)
    

    【讨论】:

    • 你能举个例子吗?我有多个具有默认值的列。当我为它们传递一些值时,它们会被忽略吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2014-08-03
    • 2016-10-05
    相关资源
    最近更新 更多