Stellen Sie sich folgendes Szenario vor: Sie haben ein Buch, das von geordneten Kapiteln besteht.Assert einzigartige Schlüsseleinschränkung für h2 Datenbank mit Slick und scalatest
Zuerst wird der Test:
"Chapters" should "have a unique order" in
{
// val exception = intercept
db.run(
DBIO.seq
(
Chapters.add(0, 0, "Chapter #0"),
Chapters.add(0, 0, "Chapter #1")
)
)
}
Nun ist die Implementierung:
case class Chapter(id: Option[Long] = None, bookId: Long, order: Long, val title: String) extends Model
class Chapters(tag: Tag) extends Table[Chapter](tag, "chapters")
{
def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
def bookId = column[Long]("book_id")
def order = column[Long]("order")
def title = column[String]("title")
def * = (id, bookId, order, title) <> (Chapter.tupled, Chapter.unapply)
def uniqueOrder = index("order_chapters", (bookId, order), unique = true)
def bookFK = foreignKey("book_fk", bookId, Books.all)(_.id.get, onUpdate = ForeignKeyAction.Cascade, onDelete = ForeignKeyAction.Restrict)
}
Vielleicht so eine einzigartige-Einschränkung für 2 Spalten ist nicht einmal möglich, in h2
?
Wie der auch wäre:
Erwartung: Eine Ausnahme geworfen werden, dass ich dann in meinem Test abfangen/erwarten, damit eine fehlerhafte Prüfung für jetzt, für einen eindeutigen Zwang zu verletzen.
Tatsächliches Ergebnis: Ein erfolgreicher Test :(
bearbeiten: Auch ich benutze diese:.
implicit val defaultPatience = PatienceConfig(timeout = Span(30, Seconds), interval = Span(100, Millis))
Können Sie nicht das generierte Schema sehen? Schauen Sie sich die Tabellendefinition innerhalb h2 selbst – nmat