Vấn đề của tôi rất đơn giản.Chèn giá trị mặc định nếu giá trị cột là 'Không' bằng cách sử dụng trơn
Tôi có một cột seqNum: Double
đó là NOT NULL DEFAULT 1
trong CREATE TABLE
tuyên bố như sau:
CREATE TABLE some_table
(
...
seq_num DECIMAL(18,10) NOT NULL DEFAULT 1,
...
);
Người dùng có thể nhập giá trị cho seqNum
hay không từ UI. Vì vậy, các PLAY
hình thức chấp nhận là như:
case class SomeCaseClass(..., seqNum: Option[Double], ...)
val secForm = Form(mapping(
...
"seqNum" -> optional(of[Double]),
...
)(SomeCaseClass.apply)(SomeCaseClass.unapply))
Bảng Schema trơn & Đối tượng trông như thế này:
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)
}
}
Khi tôi gửi seqNum
từ giao diện người dùng, mọi thứ đều hoạt động tốt nhưng khi None
là có , nó phá vỡ nói rằng không thể chèn NULL trong cột NOT NULL đó là chính xác. This question giải thích lý do.
Nhưng cách giải quyết vấn đề này bằng cách sử dụng slick
? Không thể hiểu nơi tôi nên kiểm tra về None
? Tôi đang tạo & gửi một đối tượng của SomeSection
đến insert
phương thức SomeSections
Đối tượng.
Tôi đang sử dụng máy chủ sql, nếu nó quan trọng.
Nếu tôi sử dụng '.getOrElse (theDefault)' thì giá trị mặc định được đặt trong khi tạo bảng sẽ không được sử dụng, vì tôi sẽ chuyển một thứ gì đó. –
Việc truyền 'Không' sẽ không được chuyển. – cchantep