Scala Play Framework Slick Session的问题

迈克·希亚洛维奇

我正在使用Play 2.2在Scala中创建一个应用程序。我正在play-slick 0.5.0.8用作我的MySQL DB连接器。我有以下应用程序控制器:

package controllers

import models._
import models.database._

import play.api._
import play.api.mvc._
import play.api.Play.current
import play.api.db.slick._

object Application extends Controller {
  // WORKS:
  def test = DBAction {
    implicit session => Ok(views.html.test(Cameras.findById(1)))
  }

  // DOES NOT WORK:
  def photo = Action {
    val p = PhotoFetcher.fetchRandomDisplayPhoto(someParametersBlah))
    Ok(views.html.photo(p))
  }
}

如您所见,testDBAction可以正常工作,并且可以从数据库中获取照片。不幸的是,该photo行动不起作用。

PhotoFetcher.fetchRandomDisplayPhoto(blah)做了很多不同的事情。它的内部包含对的调用Cameras.findById(blah),该调用应返回一个Camera对象(在testDBAction中有效)。但是,使用此配置,我得到以下错误:

could not find implicit value for parameter s: slick.driver.MySQLDriver.simple.Session

我试图将photoAction变成DBAction,如下所示:

def photo = DBAction {
  implicit session => {
    val p = PhotoFetcher.fetchRandomDisplayPhoto(someParametersBlah))
    Ok(views.html.photo(p))
  }
}

但这只会导致相同的丢失会话错误。就像PhotoFetcher不知道隐式会话一样。

我尝试过的另一件事是将slick.session.Database.threadLocalSessionmy导入PhotoFetcher,但这只会导致以下错误:

SQLException: No implicit session available; threadLocalSession can only be used within a withSession block

如果有帮助,这是我的Cameras对象的简化版本

package models.database

import models.Format.Format
import scala.slick.driver.MySQLDriver.simple._

case class Camera(id: Long,
                  otherStuff: String)

trait CamerasComponent {
  val Cameras: Cameras

  class Cameras extends Table[Camera]("cameras") {
    def id          = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def otherStuff  = column[String]("otherStuff", O.NotNull)

    def * = id ~ otherStuff <> (Camera.apply _, Camera.unapply _)

    val byId         = createFinderBy(_.id)
    val byOtherStuff = createFinderBy(_.otherStuff)
  }
}

object Cameras extends DAO {
  def insert(camera: Camera)(implicit s: Session) { Cameras.insert(camera) }
  def findById(id: Long)(implicit s: Session): Option[Camera] = Cameras.byId(id).firstOption
  def findByOtherStuff(otherStuff: String)(implicit s: Session): Option[Camera] = Cameras.byOtherStuff(model).firstOption
}

所以,好像我已经在某个地方交叉了。现在,我只能直接从Controller DBAction访问我的DAO对象,而不能从某个不同类的内部访问。任何帮助,将不胜感激。谢谢!

利益

您的定义是否PhotoFetcher.fetchRandomDisplayPhoto.fetchRandomDisplayPhoto包含隐式会话?

 // PhotoFetcher
 def fetchRandomDisplayPhoto(args: Blah*)(implicit s: Session) = {
   // ...
   val maybeCam = Cameras.findById(blah) // <- sees the implicit session 
   // ...
 }

还是您依赖threadLocalsessionin PhotoFetcher(没有的隐式会话参数fetchRandomDisplayPhoto)?

尽管Slick的threadLocalSession对于快速尝试一些东西很方便,但稍后可能会导致混乱和清晰度下降。最好只(implicit s: Session)对所有调用Slick模型的方法使用明确的参数列表。这也可以很好地与配合DBAction,让框架管理会话。

缺点是您必须拥有(implicit s: Session)所有方法-像这样的解决方法:https : //github.com/freekh/play-slick/issues/20

Scala不是冗长的,并且非常适合重构-因此,我建议您在进入桥梁时考虑将其过桥,并DBAction用于执行数据库工作的所有操作;为所有调用数据库模型的方法提供一个隐式会话,并查看为您带来的收益。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala,Play Framework Slick问题-找不到参数rconv的隐式值

来自分类Dev

Scala Play Framework 2.2.6编码问题

来自分类Dev

在Play Framework中使用写入Slick 3.0 Scala查询的“正确”方法

来自分类Dev

Play Framework onStarup问题

来自分类Dev

Play+Scala 测试 Slick 数据库

来自分类Dev

Scala + Play + Intellij IDEA问题

来自分类Dev

Restrict access to specific IP in Play Framework (Scala)

来自分类Dev

Cannot format log messages in play framework scala

来自分类Dev

Firebase and Play Framework(Scala)是否可行?

来自分类Dev

Does Play framework 2.2.3 support LESS in Scala

来自分类Dev

使用Scala和play Framework嵌套请求

来自分类Dev

Play Framework Scala JSON验证异常

来自分类Dev

在Scala的Play Framework 2.4中实现CORS

来自分类Dev

为什么Scala找不到参数scala.slick.session.Session的隐式值?

来自分类Dev

测试Play + Slick应用

来自分类Dev

Scala Play 2.2 Slick 1.0.1-未来{尝试{...}}超时,等待免费可用连接

来自分类Dev

如何在Play scala中使用slick 3从Rep [String]获取字符串值?

来自分类Dev

使用Play Scala时如何在Slick列映射中修剪选项字符串

来自分类Dev

Scala Play with Slick中的事务方法(类似于Spring @Transactional,也许吗?)

来自分类Dev

Scala Play 2.2 Slick 1.0.1-未来{尝试{...}}超时,等待免费可用连接

来自分类Dev

Scala Play with Slick中的事务方法(类似于Spring @Transactional,也许吗?)

来自分类Dev

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

来自分类Dev

尝试添加MySQL / slick后出现奇怪的Play Framework 2.2异常

来自分类Dev

Scala / Play:JSON序列化问题

来自分类Dev

在Play Framework 2(Scala)中加载任意文件

来自分类Dev

如何在Scala Play Framework FORMS中验证负BigDecimals?

来自分类Dev

适用于Http Post的Play Framework Scala代理

来自分类Dev

Scala Play Framework如何为当前请求设置语言?

来自分类Dev

Scala Play Framework Json序列化器错误

Related 相关文章

  1. 1

    Scala,Play Framework Slick问题-找不到参数rconv的隐式值

  2. 2

    Scala Play Framework 2.2.6编码问题

  3. 3

    在Play Framework中使用写入Slick 3.0 Scala查询的“正确”方法

  4. 4

    Play Framework onStarup问题

  5. 5

    Play+Scala 测试 Slick 数据库

  6. 6

    Scala + Play + Intellij IDEA问题

  7. 7

    Restrict access to specific IP in Play Framework (Scala)

  8. 8

    Cannot format log messages in play framework scala

  9. 9

    Firebase and Play Framework(Scala)是否可行?

  10. 10

    Does Play framework 2.2.3 support LESS in Scala

  11. 11

    使用Scala和play Framework嵌套请求

  12. 12

    Play Framework Scala JSON验证异常

  13. 13

    在Scala的Play Framework 2.4中实现CORS

  14. 14

    为什么Scala找不到参数scala.slick.session.Session的隐式值?

  15. 15

    测试Play + Slick应用

  16. 16

    Scala Play 2.2 Slick 1.0.1-未来{尝试{...}}超时,等待免费可用连接

  17. 17

    如何在Play scala中使用slick 3从Rep [String]获取字符串值?

  18. 18

    使用Play Scala时如何在Slick列映射中修剪选项字符串

  19. 19

    Scala Play with Slick中的事务方法(类似于Spring @Transactional,也许吗?)

  20. 20

    Scala Play 2.2 Slick 1.0.1-未来{尝试{...}}超时,等待免费可用连接

  21. 21

    Scala Play with Slick中的事务方法(类似于Spring @Transactional,也许吗?)

  22. 22

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

  23. 23

    尝试添加MySQL / slick后出现奇怪的Play Framework 2.2异常

  24. 24

    Scala / Play:JSON序列化问题

  25. 25

    在Play Framework 2(Scala)中加载任意文件

  26. 26

    如何在Scala Play Framework FORMS中验证负BigDecimals?

  27. 27

    适用于Http Post的Play Framework Scala代理

  28. 28

    Scala Play Framework如何为当前请求设置语言?

  29. 29

    Scala Play Framework Json序列化器错误

热门标签

归档