标签: slick-3.0

SLICK 3.0 - 多个查询相互依赖 - db.run(action)

我是Slick 3的新手,到目前为止我已经理解db.run是异步调用.返回Future后运行.map或.flatMap.

我的代码中的问题是所有子查询都不起作用(嵌套db.run).

从概念上讲,我没有得到什么?这样的代码是否有效,如下所示?基本上在第一个查询的.map中我根据第一个查询执行一些操作.

我到处都看到有产量的循环,它是唯一的出路吗?我的代码中的问题是否与返回的Future值有关?

val enterprises = TableQuery[Enterprise]
val salaries = TableQuery[Salary]

//Check if entered enterprise exists 
val enterpriseQS = enterprises.filter(p => p.name.toUpperCase.trim === salaryItem.enterpriseName.toUpperCase.trim).result

val result=db.run(enterpriseQS.headOption).map(_ match 
{
    case Some(n) => {
      //if an enterprise exists use the ID from enterprise (n.id) when adding a record to salary table
      val addSalary1 = salaries += new SalaryRow(0, n.id, salaryItem.worker)
      db.run(addSalary1)
    }
    case None =>  {
        //if an enterprise with salaryItem.enterpriseName doesn't exist, a new enterprise is inserted …
Run Code Online (Sandbox Code Playgroud)

scala scalaquery slick slick-3.0

11
推荐指数
1
解决办法
4908
查看次数

如何使用Slick和Play在测试中应用手动演变!2.4

我想在每个测试文件的开头手动运行我的evolution脚本.我正在玩Play!2.4和Slick 3.

根据文档,走的路似乎是:

Evolutions.applyEvolutions(database)
Run Code Online (Sandbox Code Playgroud)

但我无法获得我的数据库实例.在导入文档 play.api.db.Databases以获取数据库实例但是如果我尝试导入它,我收到此错误:object Databases is not a member of package play.api.db

如何获取我的数据库实例才能运行evolution脚本?

编辑:如评论中所述,这里是给出错误的完整源代码:

import models._
import org.scalatest.concurrent.ScalaFutures._
import org.scalatest.time.{Seconds, Span}
import org.scalatestplus.play._
import play.api.db.evolutions.Evolutions
import play.api.db.Databases

class TestAddressModel extends PlaySpec with OneAppPerSuite {
   lazy val appBuilder = new GuiceApplicationBuilder()
   lazy val injector = appBuilder.injector()
   lazy val dbConfProvider = injector.instanceOf[DatabaseConfigProvider]

  def beforeAll() = {
    //val database: Database = ???
    //Evolutions.applyEvolutions(database)
  }

  "test" must { 
     "test" in { } 
  } 
}
Run Code Online (Sandbox Code Playgroud)

scala playframework playframework-evolutions slick-3.0

11
推荐指数
1
解决办法
2982
查看次数

在Slick 3.0中,为什么新推出的`Streaming`很有用?

我发现Slick 3.0引入了一个名为的新功能 streaming

http://slick.typesafe.com/doc/3.0.0-RC1/database.html#streaming

我不熟悉阿卡.streaming似乎是一个懒惰或异步的值,但我不太清楚为什么它有用,什么时候它会有用..

有没有人有这个想法?

scala akka slick slick-3.0

10
推荐指数
1
解决办法
1200
查看次数

如何在Slick中使用反应流来插入数据

Slick的文档中,使用Reactive Streams的示例仅用于读取数据作为DatabasePublisher的一种方式.但是,如果您希望根据插入率将数据库用作接收器和后端,会发生什么?

我找了等效的DatabaseSubscriber,但它不存在.所以问题是,如果我有一个来源,说:

val source = Source(0 to 100)

如何用Slick创建一个Sink,将这些值写入带有模式的表中:

create table NumberTable (value INT)

mysql slick reactive-streams akka-stream slick-3.0

10
推荐指数
2
解决办法
1712
查看次数

如何在Typesafe conf上为Slick 3.0.0 RC1配置HikariCP

我有一个基于play-scala Typesafe模板(Play Scala Seed)的Play应用程序,并尝试将Slick 3.0.0添加到项目中并连接到PostgreSQL数据库.

首先,我将依赖项添加到build.sbt:

libraryDependencies ++= Seq(
    "com.typesafe.slick" %% "slick" % "3.0.0-RC1",
    "postgresql" % "postgresql" % "9.1-901.jdbc4"
)
Run Code Online (Sandbox Code Playgroud)

然后添加数据库配置application.conf:

brDb = {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  url = "jdbc:postgresql://localhost:5432/test"
  user = "postgres"
  password = "postgres"
  numThreads = 10
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有明确禁用池,因此它默认启用,并将尝试使用HikariCP,因为从Slick 3.0.0 RC1开始,HikariCP支持存在,默认情况下启用使用它的池.

在我的DAO对象中,尝试获取如下数据库连接:

Database.forConfig("brDb")
Run Code Online (Sandbox Code Playgroud)

当我使用app运行时activator run,我收到此错误:

RuntimeException:java.lang.NoClassDefFoundError:com/zaxxer/hikari/HikariConfig

然后我尝试添加HikariCP作为依赖build.sbt:

libraryDependencies ++= Seq(
    // ...
    "com.zaxxer" % "HikariCP" % "2.3.3",
    // ...
)
Run Code Online (Sandbox Code Playgroud)

清理并重新编译应用程序activator clean compile,并再次运行它,但我收到另一个错误:

RuntimeException:java.lang.UnsupportedClassVersionError:com/zaxxer/hikari/HikariConfig …

postgresql scala hikaricp playframework-2.3 slick-3.0

9
推荐指数
2
解决办法
7824
查看次数

如何在Slick 3.0.0中使用StaticQuery?

在Slick 2.1中,我有以下代码从文件执行sql-query:

def fetchResult[T](sql: String)(implicit getResult: GetResult[T]): List[T] = {
    val query = Q.queryNA[T](sql)
    try {
        Database.forDataSource(DB.getDataSource())
            .withSession { implicit session => query.list }
    }
    catch {
      case e: Throwable =>
        throw new RunSqlException(s"Query $name execution error", e)
    }
}
Run Code Online (Sandbox Code Playgroud)

在Slick 3.0.0中,您使用dbConfig.db.run方法来执行DBIOAction并获得结果的未来.但是我找不到将Q.queryNA(也就是StaticQuery[Unit, R])的结果转换成的方法DBIOAction.这样的方式存在吗?

我现在结束了不赞成的电话.帮助我变得更好!

def fetchResult[T](sql: String)(implicit getResult: GetResult[T]): Future[List[T]] = Future {
    val query = Q.queryNA[T](sql)
    try {
        this.dbConfig.db.withSession { implicit session => query.list }
    }
    catch {
      case e: Throwable =>
        throw new RunSqlException(s"Query …
Run Code Online (Sandbox Code Playgroud)

scala slick typesafe slick-3.0

9
推荐指数
1
解决办法
1230
查看次数

光滑连接两个表并获得两者的结果

我有这样的多对多关系设置:

人< - > PersonField < - >字段

现在,我不仅要查询Person的所有字段(我可以这样做),而且还要查询PersonField与Person of Field的连接版本.(我想在数据透视/中间表"PersonField"中查询/检索信息!)

人:

case class Person(id: Long, name: String)
{
   def fields =
   {
       person <- Persons.all.filter(_.id === this.id)
       field <- person.fields
   } yield field
}

class Persons(tag: Tag) extends Table[Person](tag, "persons")
{
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def name = column[String]("name")

    def * = (id, name) <> (Person.tupled, Person.unapply)
    def fields = PersonFields.all.filter(_.personID === id).flatMap(_.fieldFK)
}

object Persons
{
    lazy val all = TableQuery[Persons]
}
Run Code Online (Sandbox Code Playgroud)

领域:

case class Field(id: …
Run Code Online (Sandbox Code Playgroud)

scala join playframework-2.0 slick slick-3.0

9
推荐指数
1
解决办法
2473
查看次数

是否可以避免在Slick 3.x中使用tsql在每个类中声明StaticDatabaseConfig注释?

如果我想在Slick 3.x中使用编译时间查询,我需要使用tsql在每个类中声明一个StaticDatabaseConfig注释.

有没有办法避免这种情况并设置全局配置?

@StaticDatabaseConfig("file:src/main/resources/application.conf#tsql")
object PersistenceService {
  val database = Database.forConfig("database")
  database.run( tsql"SELECT NOW()" )
}
Run Code Online (Sandbox Code Playgroud)

t-sql scala slick-3.0

9
推荐指数
0
解决办法
224
查看次数

如何在circe中编码/解码json的时间戳?

在光滑中使用circe来获取json中的数据时,我可以获取(Timestamp/DateTime)实体中没有日期字段的数据.但是当我Timestamp在实体中使用字段时,会抛出错误:

[error] /var/www/html/scala-api/src/main/scala/oc/api/http/routes/TestApi.scala:40: could not find implicit value for parameter encoder: io.circe.Encoder[Seq[oc.api.models.UserEntity]]
[error]             auth => complete(userDao.getAll().map(_.asJson))
Run Code Online (Sandbox Code Playgroud)

这是代码,我用于Slick Entities并使用CIRCE进行json编码.

BaseTable:

abstract class BaseTable[T](tag: Tag, name: String) extends Table[T](tag, name) {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def createdAt = column[Timestamp]("created_at")
  def updatedAt = column[Timestamp]("updated_at")
  def deletedAt = column[Timestamp]("deleted_at")
}
Run Code Online (Sandbox Code Playgroud)

BaseEntity:

trait BaseEntity {
  val id : Long
  def isValid : Boolean = true
}
Run Code Online (Sandbox Code Playgroud)

UserEntity:createdAt生成编码器错误

case class UserEntity(id: Long, email: String, password: String, createdAt: Timestamp) extends BaseEntity …
Run Code Online (Sandbox Code Playgroud)

json scala slick-3.0 circe

9
推荐指数
1
解决办法
4042
查看次数

在 for-comprehension / 部分函数中添加调试点

如何在 for-comprehension 中为语句添加调试点?

for {
  a <- sqlQuery1()
  b <- sqlQuery2()
} yield {
  // output
}
Run Code Online (Sandbox Code Playgroud)

我想在执行上述每个查询时进行检查,但简单地添加调试点似乎不起作用。查询被执行而不会碰到调试点。我不确定这是否是正在使用的库、语言或 IDE 的限制。

这是我的设置:

  • 斯卡拉
  • IntelliJ IDEA 14.1.3
  • Scala 插件 1.5.200
  • 库 - Slick 3.0(使用 DBIO 操作)

更新:

案例 1:光滑

调试点不起作用。再次确认了这一点。

案例 2:不光滑

调试器会在调试点停止。但有时它会评估表达式,有时则不会。我注意到以下问题(在柯里化/匿名函数中):

  1. 变量值显示为 'Size = ?'
  2. 变量值为“调试信息不​​可用”
  3. 无法评估表达式
  4. 每当我跨过时,光标都保持在同一行上,而不会突出显示任何内容(尽管它正在后台执行操作)
  5. “警告:在...处找不到可执行代码”

实际上搜索时没有使用 slick as 关键字告诉我,很多人都有类似的问题,比如这里

scala intellij-idea slick slick-3.0

8
推荐指数
0
解决办法
769
查看次数