Aufgrund der Natur der Subjektdaten, die ich in einem meiner Projekte verwende, sind doppelte Datensätze häufig in den Eingabesätzen zu finden (manchmal bedeutet das doppelte Datensätze in demselben Eingabesatz, und dies kann leicht durch Filter vor dem Einfügen, aber normalerweise kann der Eingabe-Satz Datensätze enthalten, die Duplikate von bereits in der Datenbank vorhandenen Datensätzen sind.)
MySQL und SQLite INSERT IGNORE
Feature hilft sehr dabei.
Die Fragen, die ich habe, sind also:
Wie kann Slick INSERT IGNORE
anstelle von bare INSERT
beim Einfügen von Daten in eine MySQL- oder SQLite-Datenbank verwenden?
Was ist der optimale Weg, INSERT IGNORE
-Funktionalität zu emulieren, wenn Sie Slick mit MS SQL Server verwenden, der es nicht nativ unterstützt?
Ich habe keine Erfahrung mit Slick. Aus dem Quellcode habe ich gelernt, dass Slick, um INSERT IGNORE
verwenden zu können, einige Schritte ausführen müsste:
InsertBuilder
, der durch def createInsertBuilder(node: Node): InsertBuilder
erstellt wird. Erweitern Sie es und fügen Sie eine spezielle Methode hinzu, die der buildInsert
-Methode ähnelt. InsertInvoker
, der durch def createCountingInsertInvoker[T, U](u: ShapedValue[T, U])
erstellt wird. Erweitern Sie es und fügen Sie insertIgnore
hinzu, das ähnlich sein sollte wie def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery
von FullInsertInvoker
Was Ihre zweite Frage betrifft. Die Implementierung einer Problemumgehung für INSERT IGNORE
, wenn diese nicht unterstützt wird, hängt von der Datenbank ab. Google hilft Ihnen dabei, die verschiedenen Implementierungen zu finden. Da die obige Methode zum Hinzufügen von INSERT IGNORE
treiberunabhängig ist, könnten Sie dieselbe Struktur verwenden, um die Funktionalität für jede Datenbank hinzuzufügen.