레코드가 삽입 될 때 현재 날짜와 시간으로 DB가 INSERT_DATE 열을 채워야하는 JOURNAL 테이블이 있습니다. 제한된 범위 때문에 TIMESTAMP 유형을 용도에 사용하지 않았습니다.대량 삽입 슬릭 3.x를 수행 할 때 열 값을 생략하는 방법은 무엇입니까?
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)
, 나는 무작위 시험 데이터로 DB를 채울 :
이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 docs는 기본값을 삽입하기를 원할 경우 열을 생략해야한다고 말합니다. 하지만 저는 사례 클래스가있는 경우 어떻게 열을 생략하는지 알지 못합니다.
나는 또한이 SO post을 발견했지만 내 맥락에서 사용하는 방법을 알아낼 수 없었다.
아이디어가 있으십니까?
나를 위해 작동하지 않습니다 :'[error] Slick은 주어진 유형을 어떻게 매핑하는지 모릅니다. [오류] 가능한 원인 : Table [T]의 T가 사용자의 * 투영과 일치하지 않습니다. 또는 검색어에서 지원되지 않는 유형을 사용하고 있습니다 (예 : 스칼라 목록). [오류] 필수 수준 : slick.lifted.FlatShapeLevel [오류] 원본 유형 : (slick.lifted.Rep [Int], slick.lifted.Rep [java.time.LocalDateTime], slick.lifted.Rep [Int][오류] 포장 유형 : G [오류] TableQuery [업무 일지] .map (je => (je.id, je.valueDate, je), slick.lifted.Rep [문자열]) [오류] .amount, je.note)) ++ =' – binford