scala slick 不保留数据

菲利克斯

我有以下代码不起作用......不工作意味着在这种情况下它不会在数据库中持续......

DTO / DAO

  def createChangelogEntry(changeLog: ChangelogModel): Future[ChangelogModel] = {
    println("..........................................")
    println(changeLog)

    val entry =
      (changelogs returning changelogs.map(_.id)
        into ((log,id) => log.copy(id=Some(id)))
        ) += ChangelogModel(None, changeLog.createdat, changeLog.text)

    db.run(entry)
  }

在这种情况下可能是什么问题?模型上的匹配工作正常......

U更新:

查询语句:

CREATE TABLE Changelog (
  id BIGINT(255) NOT NULL,
  createdat DATETIME NOT NULL,
  text text NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

我的型号:

package models

import java.sql.Date

import play.api.libs.json.{JsValue, Json, Writes}

/**
  * Created by Felix Hohlwegler on 08.06.2017.
  */
case class ChangelogModel(
                           id: Option[Int] = None,
                           createdat: String,
                           text: String
                         )

object ChangelogModel {
  implicit val changelogFormat = Json.format[ChangelogModel]
}

控制器功能:

package controllers

import javax.inject.{Inject, Singleton}

import dto.changelogDTO
import models.{ChangelogModel, ProcessTemplatesModel}
import play.api.libs.json.{JsError, JsSuccess, Json}
import play.api.mvc.{Action, AnyContent, Controller, Request}

import scala.concurrent.Future

/**
  * Created by Felix Hohlwegler on 08.06.2017.
  */
@Singleton
class Changelogs @Inject()(changelogDTO: changelogDTO) extends Controller {

  def createChangelogEntry = Action { implicit request =>
    request.body.asJson.map(_.validate[ChangelogModel] match {
      case JsSuccess(process, _) =>
        changelogDTO.createChangelogEntry(process)
      case err@JsError(_) => BadRequest("TEST")
      case _ => BadRequest("fail to create Counter")
    }).getOrElse(BadRequest("Failure tu create Counter"))
    Ok("s")
  }
}
泰勒

一个问题是您没有等待您的插入从您的控制器完成:

// Problem
case JsSuccess(process, _) => changelogDTO.createChangelogEntry(process)

您应该映射未来并像这样异步返回其结果:

// Do this
case JsSuccess(process, _) => changelogDTO.createChangelogEntry(process).map(model => Ok(Json.toJson(model))

但是,这意味着您将需要所有其他情况也返回期货,并且您必须将结果操作更改为 async。这就是我将如何做到的:

def createChangelogEntry = Action.async(parse.json) { implicit request =>
  request.body.validate[ChangelogModel].fold(
    errors => Future(BadRequest(JsError.toJson(errors))),
    changelogModel => changelogDTO.createChangelogEntry(changelogModel).map(model => Ok(Json.toJson(model))
  )
}

同时,您可能会发现通过将当前插入内容包装在这样的方式中更容易调试Await.result

import scala.concurrent.duration._

case JsSuccess(process, _) => 
  val model = Await.result(changelogDTO.createChangelogEntry(process), 5 seconds)
  Ok("We inserted the thing")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新数据库行scala slick

来自分类Dev

Scala Slick数据库视图

来自分类Dev

如何使用Scala Slick连续访问数据库条目

来自分类Dev

Scala的Slick Orm如何检索数据库列值

来自分类Dev

在Slick,scala中处理Postgres json数据类型

来自分类Dev

Scala Slick在数据库中创建表

来自分类Dev

如何使用Scala Slick连续访问数据库条目

来自分类Dev

Scala Slick在数据库中创建表

来自分类Dev

Play+Scala 测试 Slick 数据库

来自分类Dev

Scala Slick和SQLite

来自分类Dev

Scala Slick表继承

来自分类Dev

Scala Slick 2.0.0的生成错误

来自分类Dev

Scala Slick 3.0.0奇怪的错误

来自分类Dev

slick&scala:什么是TableQueries?

来自分类Dev

Scala Slick 3.1多个联接

来自分类Dev

Scala Slick 3游戏框架

来自分类Dev

为什么在scala spark中加入数据框后外连接不保留所有提到的列?

来自分类Dev

将Scala Slick与数据库枚举一起使用

来自分类Dev

我数据库中的Scala Slick和复杂类型

来自分类Dev

使用Slick和Scala将表添加到SQLite数据库

来自分类Dev

Scala Slick 将多个随机行插入到 PostgreSql 数据库中

来自分类Dev

如何在scala play2.6 slick中将Select Statemnt数据存储到var

来自分类Dev

如何在 Slick 中的一系列数据库查询之间包含 scala 操作?

来自分类Dev

SSKeychain不保留数据

来自分类Dev

Scala Slick:永无止境的流

来自分类Dev

Scala Slick 2加入多个领域?

来自分类Dev

使用Scala Slick创建合成主键

来自分类Dev

使用Slick Table的Scala类型推断

来自分类Dev

Scala slick是否具有超时设置?