私のScalaPlayframeworkアプリでexecuteInsert
、sms_token(class)を作成しようとしています。次に、主キーを使用して一意のトークンを作成し、それをsms_tokenに追加して、で保存しexecuteUpdate
ます。
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はAnyオブジェクトを返しますが、キーがLongでasInstanceOf[Long]
あるため、後で更新部分で必要になるため、これを実行しています。私はScalaの初心者なので、これが正しいかどうかはわかりません。もっと良いScalaの方法があるのではないでしょうか。