gpt4 book ai didi

scala - 执行批量插入 slick 3.x 时如何省略列值?

转载 作者:行者123 更新时间:2023-12-04 20:34:59 26 4
gpt4 key购买 nike

我有一个 JOURNAL 表,其中 INSERT_DATE 列应该由数据库填充,插入记录时的当前日期和时间。我没有故意使用 TIMESTAMP 类型,因为它的范围有限。

class Journal(tag: Tag) extends Table[JournalEntry](tag, "JOURNAL") { 
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def insertDate = column[OffsetDateTime]("INSERT_DATE", SqlType("DateTime default CURRENT_TIMESTAMP"))(localDateTimeColumnType)
def valueDate = column[OffsetDateTime]("VALUE_DATE", SqlType("DateTime"))(localDateTimeColumnType)
def amount = column[Int]("AMOUNT")
def note = column[String]("NOTE", O.Length(100))

def * : ProvenShape[JournalEntry] = (id.?, insertDate.?, valueDate, amount, note)
<> ((JournalEntry.apply _).tupled, JournalEntry.unapply)
}

我还实现了一个案例类:
case class JournalEntry(id: Option[Int], insertDate: Option[LocalDateTime], 
valueDate: LocalDateTime, amount: Int, note: String)

当我的应用程序启动时,我用随机测试数据填充数据库:
TableQuery[Journal] ++= Seq.fill(1000)(JournalEntry(None, Some(LocalDateTime.now()), 
LocalDateTime.of(2006 + Random.nextInt(10), 1 + Random.nextInt(11),
1 + Random.nextInt(27),Random.nextInt(24), Random.nextInt(60)), Random.nextInt(),
TestDatabase.randomString(100)))

这有效,但 INSERT_DATE 不是由 JVM 设置的,而是由数据库设置的。 Slick 文档说如果想要插入默认值,应该省略列。但是如果我有一个案例类,我就是不明白我是如何省略列的。

我也发现了这个 SO post但无法弄清楚如何在我的上下文中使用它。

有任何想法吗?

最佳答案

Slick 文档在第一个代码片段 here 中给出了这种遗漏的示例。 .按照步骤或 the cvogt's answer你会得到解决方案:
TableQuery[Journal].map(je => (je.id, je.valueDate, je.amount, je.note)) ++= Seq.fill(1000)((None, LocalDateTime.of(2006 + Random.nextInt(10), 1 + Random.nextInt(11), 1 + Random.nextInt(27),Random.nextInt(24), Random.nextInt(60)), Random.nextInt(), TestDatabase.randomString(100)))

关于scala - 执行批量插入 slick 3.x 时如何省略列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com