Когда я получаю запрос на обновление для данного идентификатора, я пытаюсь обновить столбцы masterId и updatedDtTm в таблице DB (я не хочу обновлять свой createdDtTm) , Ниже мой код:Scala/Slick 3.0.1 - Обновление нескольких столбцов
case class Master(id:Option[Long] = None,masterId:String,createdDtTm:Option[java.util.Date],
updatedDtTm:Option[java.util.Date])
/**
* This is my Slick Mapping table
* with the default projection
*/
`class MappingMaster(tag:Tag) extends
Table[Master](tag,"master") {
implicit val DateTimeColumnType = MappedColumnType.base[java.util.Date, java.sql.Timestamp](
{
ud => new Timestamp(ud.getTime)
}, {
sd => new java.util.Date(sd.getTime)
})
def id = column[Long]("id",O.PrimaryKey,O.AutoInc)
def masterId = column[String]("master_id")
def createdDtTm = column[java.util.Date]("created_dttm")
def updatedDtTm = column[java.util.Date]("updated_dttm")
def * = (id.? , masterId , createdDtTm.? , updatedDtTm.?) <>
((Master.apply _).tupled , Master.unapply _) }
/**
* Some where in the DAO update call
*/
db.run(masterRecords.filter(_.id === id).map(rw =>(rw.masterId,rw.updatedDtTm)).
update(("new_master_id",new Date()))
// I also tried the following
db.run(masterRecords.filter(_id === id).map(rw => (rw.masterId,rw.updatedDtTm).shaped[(String,java.util.Date)]).update(("new_master_id",new Date()))
документация Slick государств, заказовМои обновить несколько столбцов нужно использовать карту, чтобы получить соответствующие столбцы, а затем обновить их.
Проблема заключается в следующем: метод обновления, кажется, принимает значение Nothing.
Я также попытался следующие, который делает то же самое, что и выше:
val t = for {
ms <- masterRecords if (ms.id === "1234")
} yield (ms.masterId , ms.updateDtTm)
db.run(t.update(("new_master_id",new Date())))
Когда я компилирую код, он дает мне следующую Compilation Exception:
Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List).
[error] Required level: slick.lifted.FlatShapeLevel
[error] Source type: (slick.lifted.Rep[String], slick.lifted.Rep[java.util.Date])
[error] Unpacked type: (String, java.util.Date)
[error] Packed type: Any
[error] db.run(masterRecords.filter(_id === id).map(rw => (rw.masterId,rw.updatedDtTm).shaped[(String,java.util.Date)]).update(("new_master_id",new Date()))
Я использую Scala 2.11 с Slick 3.0.1 и IntelliJ в качестве среды IDE. Очень ценю, если вы можете пролить свет на это.
Приветствие, Sathish
Спасибо за ваш ответ, но это не отличается от что я пытался раньше, и это также приводит к проблеме компиляции. Следующий снимок экрана в IntelliJ указывает, что query.update ожидает значение: Nothing, а не значение: (String, java.util.Date). –
У вас есть дополнительная пара скобок внутри 'update'. – Ixx
Метод обновления ожидает значения Nothing и, следовательно, если я использую ваш код, IntelliJ Complains говорит слишком много параметров для обновления метода. Еще раз, я использую последнюю версию Slick 3.0.1, похоже, что она работает с slick 2.0, но мой вопрос для Slick 3.0.1 –