加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在执行批量插入光滑3.x时省略列值?

发布时间:2020-12-16 18:36:51 所属栏目:安全 来源:网络整理
导读:我有一个JOURNAL表,其中INSERT_DATE列应由DB填充,插入记录时的当前日期和时间.我没有故意使用TIMESTAMP类型,因为它的范围有限. class Journal(tag: Tag) extends Table[JournalEntry](tag,"JOURNAL") { def id = column[Int]("ID",O.PrimaryKey,O.AutoInc) d
我有一个JOURNAL表,其中INSERT_DATE列应由DB填充,插入记录时的当前日期和时间.我没有故意使用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类:

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),TestDatabase.randomString(100)))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读