【问题标题】:Squeryl clauses (from, select, like, where) are not working in intellijSqueryl 子句(from、select、like、where)在 intellij 中不起作用
【发布时间】:2014-01-08 14:13:31
【问题描述】:

我一直试图让 IDE 项目识别 Squeryl 使用的子句。我已将 Squeryl*.jar 添加到我的项目依赖项中,但我仍然必须导入要使用的子句“From”的类。更具体地说,我必须使用“import org.squeryl.dsl.boilerplate.FromSignatures”扩展对象,以使“from”工作。这是一个奇怪的仍然可行的解决方案,但是命令“like/select”不能被导入..这是怎么回事?我什至尝试实现 select 方法..

    def select[R](r: =>R): R

    object ExternalVendor extends FromSignatures{
      def findAll = tx {
        from(vendors)(s => select(s)) map(s => s) }

      def select[R](r: =>R): R
      //def select[QueryYield[_R]](r: =>QueryYield[_R]): QueryYield[_R]
    }

直到它给我“R”的问题,说选择不是预期的类型“QueryYield [_R]” 请帮忙..

代码:

   package object models {
              implicit val transactionFailures: Table[TransactionFailure] = LowkeySchema.transactionFailures
              implicit val vendors: Table[ExternalVendor] = LowkeySchema.vendors
              implicit val products: Table[Product] = LowkeySchema.products
            }

            trait Model[A] extends KeyedEntity[Long] { this: A =>
              val id: Long = 0
              def save(implicit table: Table[A]): Either[Throwable, String] = {
                tx {
                  try {
                    table.insert(this)
                    Right("Domain object is saved successfully")
                  } catch {
                    case exception: Throwable => Left(exception)
                  }
                }
              }
            }

            abstract class ExternalVendor(val name: String, val url: String) extends Model[ExternalVendor]

            object ExternalVendor extends FromSignatures{
              def findAll = tx {
                from(vendors)(s => select(s)) map(s => s) }
              //def select[QueryYield[_R]](r: =>QueryYield[_R]): QueryYield[_R]
            }

            abstract class Product(val description: String,
                          val vendorName: String,
                          val basePrice: Double,
                          val plusPercent: Double)
              extends Model[Product] {
              def calculatePrice = basePrice + (basePrice * plusPercent / 100)
            }

            object Product extends FromSignatures{
              def findByDescription(description: String): Option[Product] =
                tx {
                  products.where(p => p.description like description).headOption
                }
            }

【问题讨论】:

  • 我正在使用 Squeryl_0.9.5。为了解决 intellij 中的子句问题,我使用了 PrimitivetypeMode import org.squeryl.PrimitiveTypeMode._ 我没有收到 /where/from/etc 等子句的任何语法错误。感谢所有帮助!

标签: java scala intellij-idea squeryl


【解决方案1】:

这方面的文档有待改进。在 Squeryl 0.9.5 中,对于典型用途,您希望:

import org.squeryl._
import PrimitiveTypeMode._

后一种导入将带来您需要的大部分内容。

在 Squeryl 0.9.6 中,PrimitiveTypeMode 已被弃用,您可以定义自己的 EntryPoint 对象,然后从该对象导入。

【讨论】:

  • 如果您使用的是 0.9.6,您可以在此处找到有关弃用 PrimitiveTypeMode 的更多信息:squeryl.org/0.9.6.html
  • 使用 import org.squeryl.PrimitiveTypeMode._ 修复了 intellij 中子句问题的修复。_
【解决方案2】:

我假设您已经阅读了 squeryl 文档中的 getting started 部分。 设置后,来自examples 之一的导入应该足够了:

import org.squeryl._
import adapters._
import dsl._
import dsl.ast.{RightHandSideOfIn, BinaryOperatorNodeLogicalBoolean}
import framework._

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2019-06-02
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多