如何使用Slick进行INSERT IGNORE查询?

Iva*_*van 9 scala slick

由于我在我的项目中使用的主题数据的性质,在输入集中经常需要重复记录(有时它意味着在同一输入集中重复记录,这可以通过预插入轻松处理过滤,但通常输入集可以包含与数据库中已存在的记录重复的记录.

MySQL和SQLite INSERT IGNORE功能有助于处理这个问题.

所以我得到的问题是:

  1. 在将数据插入MySQL或SQLite数据库时,如何使Slick使用INSERT IGNORE而不是裸INSERT

  2. INSERT IGNORE使用Slick与MS SQL Server本地不支持时,模拟功能的最佳方法是什么?

EEC*_*LOR 5

我对Slick没有经验.从我收集的源代码中,为了使Slick能够使用,INSERT IGNORE您需要执行以下几个步骤:

  • 扩展所需数据库的驱动程序
  • 覆盖InsertBuilder通过创建的默认值def createInsertBuilder(node: Node): InsertBuilder.扩展它并添加一个类似于该buildInsert方法的专用方法.
  • 覆盖InsertInvoker通过创建的默认值def createCountingInsertInvoker[T, U](u: ShapedValue[T, U]).扩展它,并添加insertIgnore这应该是类似于def insert[TT](query: Query[TT, U])(implicit session: Session): RetQueryFullInsertInvoker

至于你的第二个问题.在INSERT IGNORE不支持数据库的情况下实施变通方法是依赖于数据库的,google将帮助您找到不同的实现.由于上述添加方法与INSERT IGNORE驱动程序无关,因此可以使用相同的结构为任何数据库添加功能.