当案例类和对象名相同时,scala问题与slick 2有关

时间:2014-08-06 10:37:34

标签: mysql scala slick-2.0

实际上我对类名有一些问题,这就是我的问题

我有一个这样的案例类,

case class Foo(
  val compositeKey: String, // clientId-now-requestId
  val requestPath: String,
  val requestStatus: String) {

  def this() = this("", "", "")
  def someData = this.compositeKey.split("-")(0)
  def someData2 = this.compositeKey.split("-")(2)
}

Slick的Projection类,

class Foos(tag: Tag) extends Table[Foo](tag, "Foo") {

  def compositeKey: Column[String] = column[String]("composite_key", O.PrimaryKey)
  def requestPath: Column[String] = column[String]("request_path")
  def requestStatus: Column[String] = column[String]("request_status")
  def * : ProvenShape[ClientApiLog] = (compositeKey, requestPath, requestStatus) <> (Foo.tupled, Foo.unapply) //Error is thrown in this line
}

不幸的是,案例类名称==对象

object Foo {
.
.
.
}

这是一个旧代码,案例类和对象已在很多地方使用,因此我无法更改案例类或对象的名称,因为它们具有相同的名称我遇到了问题创建一个投影类,我在这一行中遇到错误:

def * : ProvenShape[Foo] = (compositeKey, requestPath, requestStatus) <> (Foo.tupled, Foo.unapply)

- Implicit conversions found: (compositeKey, requestPath, requestStatus) => anyToToShapedValue((compositeKey, requestPath, 
 requestStatus))
- value tupled is not a member of object models.Foo
- implements scala.slick.lifted.AbstractTable.$times

当我更改case类名并在投影类中使用它它正常工作时,我遇到了这个问题,因为case类和对象具有相同的名称。有没有解决这个问题的方法,可以在不改变case类/对象名的情况下解决吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试这样

(Foo.apply _).tupled