首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用像运算符在光滑?

如何使用像运算符在光滑?
EN

Stack Overflow用户
提问于 2020-11-18 06:16:09
回答 1查看 89关注 0票数 0

我正在尝试使用框架与MySQL集成。但是,每当我像使用一样使用运算符时,它就会失败,错误如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
.filterIf(etilizeRequest.q.nonEmpty) {
    case ((((((prod, manRep), catRep), cnRep), pdRep), prodSkusRep), saRep) =>
        cnRep.map(_.name).like("%"+etilizeRequest.q.get+"%").get
}

误差

slick.compiler.HoistClientOps$$anonfun$rewriteDBSide$1.applyOrElse(HoistClientOps.scala:159) slick.SlickException:在计算Rep[Option_].getOrElse的默认值时遇到异常--当数据库端需要该值时,不能懒洋洋地执行。slick.ast.NodeOps$.$anonfun$replace$2(Util.scala:48)的.BinaryNode.mapChildren$(Node.scala:200) at slick.ast.Filter.mapChildren(Node.scala:310) at slick.ast.NodeOps$.g$1(Util.scala:48) at slick.ast.NodeOps$.r$1(Util.scala:47)slick.compiler.HoistClientOps$$anonfun$rewriteDBSide$1.applyOrElse(HoistClientOps.scala:152) at slick.ast.NodeOps$.r$1(Util.scala:47)在slick.ast.NodeOps$.$anonfun$replace$2(Util.scala:48) at slick.ast.BinaryNode.mapChildren(Node.scala:204) at slick.ast.BinaryNode.mapChildren$(Node.scala:200) at slick.ast.Filter.mapChildren(Node.scala:310) at slick.ast.NodeOps$.g$1(Util.scala:48)在slick.ast.NodeOps$.r$1(Util.scala:47)

有人能提出这个错误背后的原因吗?我该如何解决呢?

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 09:35:57

.get发生在SQL级别时,Slick不能总是在Option上调用.get。我不清楚这是什么时候发生的,但在您的示例中,我猜这将是最终的.get。我认为这是因为在数据库级别上,我们会要求将可选的like表达式转换为SQL。我觉得这不可能。

在您的示例中,需要将可选列转换为字符串列:

代码语言:javascript
代码运行次数:0
运行
复制
cnRep.map(_.name).asColumnOf[String].like(...etc...)

...and,您可以省略最后的.get调用。(我实际上以为Slick 3.3中增加了对此的自动支持,但我想并非如此)。

您还可以使用filterOpt而不是filterIf。这将从您的get表达式中再删除一个LIKESection 2.9 of 给出了一些例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64888000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档