slickslick-2.0

Scala slick 2.0 updateAll equivalent to insertALL?


Looking for a way to do a batch update using slick. Is there an equivalent updateAll to insertALL? Goole research has failed me thus far.

I have a list of case classes that have varying status. Each one having a different numeric value so I cannot run the typical update query. At the same time, I want to save the multiple update requests as there could be thousands of records I want to update at the same time.


Solution

  • Sorry to answer my own question, but what i ended up doing is just dropping down to JDBC and doing batchUpdate.

    private def batchUpdateQuery = "update table set value = ? where id = ?"
    
    /**
      * Dropping to jdbc b/c slick doesnt support this batched update
      */
    def batchUpate(batch:List[MyCaseClass])(implicit subject:Subject, session:Session) = {
      val pstmt = session.conn.prepareStatement(batchUpdateQuery)
    
      batch map { myCaseClass =>
        pstmt.setString(1, myCaseClass.value)
        pstmt.setString(2, myCaseClass.id)
        pstmt.addBatch()
      }
    
      session.withTransaction {
        pstmt.executeBatch()
      }
    }