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

sql – 如果使用slick将列值设置为“None”,则插入默认值

发布时间:2020-12-12 06:36:09 所属栏目:MsSql教程 来源:网络整理
导读:我的问题很简单. 我有一个列seqNum:Double在CREATE TABLE语句中是NOT NULL DEFAULT 1,如下所示: CREATE TABLE some_table( ... seq_num DECIMAL(18,10) NOT NULL DEFAULT 1,...); 用户可以从UI输入seqNum的值.所以接受PLAY表格就像: case class SomeCaseCl
我的问题很简单.

我有一个列seqNum:Double在CREATE TABLE语句中是NOT NULL DEFAULT 1,如下所示:

CREATE TABLE some_table
(
    ...
    seq_num DECIMAL(18,10) NOT NULL DEFAULT 1,...
);

用户可以从UI输入seqNum的值.所以接受PLAY表格就像:

case class SomeCaseClass(...,seqNum: Option[Double],...)
val secForm = Form(mapping(
    ...
    "seqNum" -> optional(of[Double]),...
  )(SomeCaseClass.apply)(SomeCaseClass.unapply))

光滑的Table Schema&对象看起来像这样:

case class SomeSection (
   ...
   seqNum: Option[Double],...
)
class SomeSections(tag: Tag) extends Table[SomeSection](tag,"some_table") {
  def * = (
      ...
      seqNum.?,...
    ) <> (SomeSection.tupled,SomeSection.unapply _)

  ...
  def seqNum = column[Double]("seq_num",O.NotNull,O.Default(1))
  ...
}
object SomeSections {

  val someSections = TableQuery[SomeSections]
  val autoInc = someSections returning someSections.map(_.sectionId)

  def insert(s: someSection)(implicit session: Session) = {
     autoInc.insert(s)
  }
}

当我从UI发送seqNum时,一切正常,但是当有None时,它会断言无法在NOT NULL列中插入NULL,这是正确的. This question解释了原因.

但如何使用光滑解决这个问题?无法理解我应该在哪里检查无?我正在创造&发送SomeSection对象以插入SomeSections对象的方法.

我正在使用sql-server,如果重要的话.

解决方法

使用默认值不需要插入值而不是插入NULL.这意味着您需要插入自定义投影.

people.map(_.name).insert(“Chris”)将使用所有其他字段的默认值. scala的本机元组转换和案例类转换的局限性可能会使这有点麻烦.像Slick的HLists,Shapeless,Scala Records或Scala XR这样的东西可以提供帮助,但目前并非琐碎或非常实验性的.

(编辑:李大同)

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

    推荐文章
      热点阅读