Slick TableQuery 上的类型不匹配

问题描述 投票:0回答:1

我正在尝试拥有一个通用的类型定义,可以通过 slicks TableQuery 类型来满足:

  class OrderTable(tag: Tag) extends Table[Order](tag, "orders") 
     ...
  
  val orders = TableQuery[OrderTable]

  type Ta[X] = TableQuery[Table[X]]

  val orderTable: Ta[Order] = orders

我想要实现的是,我在特征中有一个抽象类型定义,它可以是光滑的表,也可以是其他东西,比如哈希图。我收到以下编译错误:

found   : slick.jdbc.PostgresProfile.api.TableQuery[at.gepro.dbtemplate.OrderTable]
    (which expands to)  slick.lifted.TableQuery[at.gepro.dbtemplate.OrderTable]
 required: SlickOrderRepository.this.Ta[at.gepro.dbtemplate.Order]
    (which expands to)  slick.lifted.TableQuery[slick.jdbc.PostgresProfile.Table[at.gepro.dbtemplate.Order]]

我不明白为什么这个作业不起作用,一切都使用

PostgresProfile
api.

试过

AbstractTable
但也没用

scala types slick
1个回答
0
投票

因为

TableQuery
是不变的

class TableQuery[E <: AbstractTable[?]](cons: Tag => E) extends Query[E, E#TableElementType, Seq]

不是

TableQuery[+E <: AbstractTable[?]]
.

OrderTable
Table[Order]
的子类型,但
TableQuery[OrderTable]
不是
TableQuery[Table[Order]]
的子类型。

尝试存在主义类型

type Ta[X] = TableQuery[_ <: Table[X]]

或必要时使用其他类型参数

type Ta[X, T <: Table[X]] = TableQuery[T]
© www.soinside.com 2019 - 2024. All rights reserved.