В моем приложении Scala Playframework я пытаюсь с executeInsert
создать sms_token (класс). Затем с помощью первичного ключа создайте уникальный токен, добавьте его в sms_token и сохраните его с помощью executeUpdate
.Как мне удалить Любые возвращенные из executeInsert в Anorm to Long
case class SmsToken(id: Option[Long], token: String, phoneNumber: String, startDate: Option[Date], endDate: Option[Date], used: Boolean, tempReviewGrade: Option[Int], tempReviewText: Option[String])
object SmsToken {
val simple = {
get[Option[Long]]("id") ~
get[String]("token") ~
get[String]("phone_number") ~
get[Option[Date]]("start_date") ~
get[Option[Date]]("end_date") ~
get[Boolean]("used") ~
get[Option[Int]]("temp_review_grade") ~
get[Option[String]]("temp_review_text") map {
case id ~ token ~ phone_number ~ start_date ~ end_date ~ used ~ temp_review_grade ~ temp_review_text => SmsToken(id, token, phone_number, start_date, end_date, used, temp_review_grade, temp_review_text)
}
}
}
метод:
def createToken(n: String): Option[Long] = {
var addedTokenPk = 0L
val result = DB.withConnection {
implicit connection =>
SQL("insert into sms_token(token, phone_number, start_date, end_date, used, temp_review_grade, temp_review_text) values({token},{phone_number},{start_date},{end_date},{used}, {temp_review_grade}, {temp_review_text})").on(
'token -> "",
'phone_number -> n,
'start_date -> new Date(),
'end_date -> new Date(),
'used -> 0,
'temp_review_grade -> 0,
'temp_review_text -> ""
).executeInsert()
}
result match {
case Some(pk) => {
addedTokenPk = pk.asInstanceOf[Long]
}
case None => println("YAAARRRRR")
}
if (addedTokenPk != 0L) {
val token = Util.createUniqueToken(addedTokenPk)
DB.withConnection {
implicit connection =>
SQL("update sms_token s set s.token={token} where s.id={id}").on(
'id -> ("" + addedTokenPk).toLong,
'token -> token
).executeUpdate()
}
return Some(addedTokenPk)
}
None
}
мой вопрос об этой части:
result match {
case Some(pk) => {
addedTokenPk = pk.asInstanceOf[Long]
}
case None => println("YAAARRRRR")
}
executeInsert возвращает Любой объект и так как ключ Долго я делаю asInstanceOf[Long]
так как мне нужно это позже в части обновления. Я Scala noob, поэтому я не уверен, что это правильно. Может быть, есть лучший способ Scala?
hmm my executeInsert() не имеет метода .map. Наверное, я что-то упустил? – jakob
'executeInsert()' возвращает параметр [Long], а опция имеет метод «map» – maxmc
Я просто заметил, что ваш парсер выглядит странно: 'get [Option [Long]] (« id »)' должен быть 'get [Pk [Long]] ("id") 'может быть, это имеет значение. – maxmc