问题标签 [slick-2.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1523 浏览

scala - 没有为 scala.slick.lifted.ColumnOrdered[Long] 定义隐式排序

我通过播放插件使用 slick 2.0,以下是我的表映射

然后,我像这样创建了 TableQuery 对象

val tasks = TableQuery[Tasks]

我曾经tasks.list得到List[Task]正确返回的结果,但是当我想通过使用对结果进行排序时,tasks.list.sortBy(_.id.get.desc) 我得到了这个错误

没有为 scala.slick.lifted.ColumnOrdered[Long] 定义隐式排序。

任何想法?

0 投票
1 回答
187 浏览

playframework - Errors when converting to postgres

Background

  • Play 2.3
  • Slick 2.1
  • Play-Slick 0.7
  • Running in Typesafe Activator

I have a pretty basic Play and Slick-based application. Up to now I've been using the in-memory h2 database used by default in most of the examples.

In application.conf I have the following lines:

If I use

for any code which interacts with the database, the application knows to pull in the defines in application.conf and the following happens when I run my application:

  • evolutions.default/1.sql is created
  • a new h2 database is instantiated in memory
  • 1.sql is run on that db
  • the application can interact with the db

Problem

I want to migrate to using a Postgres db, so I've changed application.conf to:

and I've added the following to my build.sbt

However, if I write a test like the following:

I get a few errors which I don't understand:

[error] p.a.d.s.d.TableScanner$ - Got an error converting to DDL. Check whether the profile used for the Table/TableQuery is the same one used by DDL generation.

[info] foospec

[info] DB should

[info] ! store Foos

[error] SlickException: JdbcProfile has no TypeInfo for type Int/INTEGER

(I have a stack trace for the error if needed, but I've left it out for now)

Any idea what I've done wrong?

0 投票
2 回答
1096 浏览

scala - 当使用带有 Slick 2.0 的 DAO 时,我的数据库访问方法应该放在哪里?

(这个问题是基于一个非常相似的先前请求帮助。随着 DAO 和多个数据库驱动程序的引入,同样的问题需要不同的方法,我希望保证一个新的 SO 问题。)

我有一个这样定义的class和光滑的Table

还有一个数据访问对象:

这非常棒,因为现在我可以在我的application.conf:

...如果我在控制器中执行以下操作:

我可以访问我的foos TableQuery,它会自动获取为db.defaultin提供的驱动程序和数据库 url application.conf

以类似但不太好的方式,我可以在我的测试中执行以下操作Specification

但是,如果我想定义一个可以作用于 a 的方法TableQuery[Foo]怎么办?像这样的东西:


问题

编写findByTitle方法的正确方法是什么,我应该把它放在哪里,以便我可以:

  • 以一种不会与作用于 的同名方法冲突的方式调用它TableQuery[Bar]。来自 OO,我觉得我想做类似的事情foos.findByTitle("someFoo"),但如果有更好的方法来实现这种功能风格,我愿意接受建议。
  • 从应用程序控制器调用它,以便查询将与我的db.defaulth2 驱动程序一起使用,并从我的测试中调用它,Specification以便它与我的db.testpostgres 驱动程序一起使用。

顺便说一句,如果我可以把它放在我的 DAO 中:

然后import models.dao.current._在我想使用此 DAO 的任何地方,如何将相同的表单扩展到以下内容:

如果我尝试这样做,编译器会抱怨没有an implicit Application in scope.

0 投票
2 回答
1836 浏览

scala - Slick:从 groupBy "group" 中获取元素

从 groupBy 的“组”部分选择元素的首选方法是什么?(groupBy 导致 [key -> group] 关系)。如果可能的话,它应该会导致一个分贝命中,或者至少是一个恒定数量的命中。

例如,假设我们有一个 Locations(id) 和一个 Companies(id, locationId,foundedDate) 表。我们如何才能找到每个地点最古老的公司?

我会这样做:

但这会产生运行时异常:

0 投票
1 回答
490 浏览

scala - 光滑的构建过滤条件

我认为下面的代码大多不言自明,但这里有一个简短的解释。

我有一个需要添加到查询条件的 id 列表。我可以轻松地将条件“和”到查询中(见val incorrect下文),但在想出一个“或”条件的好方法时遇到了麻烦。

id 列表不是静态的,我只是在其中放一些作为示例。如果可能的话,我想知道如何使用 for 理解而不使用 for 理解。

此外,如果您想运行代码,您应该能够将此代码放入 repl 并添加一些导入。

0 投票
2 回答
380 浏览

scala - 将类映射为类中的列类型

我了解在使用诸如Long, Int, Stringetc 之类的类型时这是如何完成的。但是假设我有一个类在另一个类中有字段,如下所示:

Foo我将如何为我的自定义类型(在我的类中)设置映射器Bar

文档链接)


更新:

数据库驱动程序:slick.driver.PostgresDriver

光滑 2

我猜原始 SQL 应该是这样的:

应该可以这样调用Bar

0 投票
2 回答
1755 浏览

slick - Scala slick 2.0 updateAll 等同于 insertALL?

寻找一种使用 slick 进行批量更新的方法。是否有与 insertALL 等效的 updateAll?到目前为止,古尔的研究让我失望了。

我有一个具有不同状态的案例类列表。每个都有不同的数值,所以我无法运行典型的更新查询。同时,我想保存多个更新请求,因为我想同时更新数千条记录。

0 投票
2 回答
1643 浏览

scala - 光滑的“===”编译仅用于理解

我遇到了一种奇怪的行为,我需要一些帮助来弄清楚为什么会发生这种情况。问题是我有一个查询如下:

这不会编译产生如下错误:

但是,如果我将代码重写为:

它编译并且工作正常。

该表定义如下:

我有一个隐式转换来映射 UserId 类型:

它看起来像一个类型推断问题,但我无法真正理解它为什么会发生。

任何人都知道为什么在我报告的两种情况下这应该表现不同?

编辑:经过一番调查,我发现当使用where隐式转换时userIdColumnType,必须在范围内,而使用 for 理解则不需要。对此有很好的解释吗?

0 投票
2 回答
1522 浏览

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

将 Play 框架与 Slick 一起使用时,从固定字符数据库列中修剪值的正确方法是什么,正确的位置在哪里?

我要修剪字符串的原因是数据库模式指定了character(40)列类型而不是character varying类型。

我有这个案例类:

我有这个光滑的表关系:

我有这个带有 JSON 映射的测试类:

这一切都有效,但返回一个空格填充的字符串。

我在 JSON 映射器中尝试了一些修剪变体:

trim1上面的工作,null但当可选值不存在时返回。

trim2确实适用于所有情况,但我已经在各个地方看到它mapgetForElse使用fold.

trim3刚刚超出了我目前对 Scala 的理解的限制,并显示了我的意图但没有编译。

情况下的编译错误trim3为:

类型不匹配; 找到:所需对象:play.api.libs.json.Json.JsValueWrapper

我当然可以接受 using fold,但是通常的方法是什么?

0 投票
1 回答
247 浏览

scala - 如何为 slick2 编写类和表类映射而不是使用案例类?

我之前使用案例类将类对象转换为slick2的数据,但目前我使用另一个播放插件,插件对象使用案例类,我的类是这个案例类所固有的。所以,我不能使用case类作为scala语言禁止用例类对case类固有的。

前:

有用。但是现在我需要将上面的内容更改为以下内容:

我不知道如何编写自动生成的案例类模板之类的元组和取消应用(我不是我的写作是否正确)方法。或者你可以用其他方式通过 slick2 将类映射到 talbe。

任何人都可以给我一个例子吗?