Slick Scala 方法推断泛型类型
Slick Scala method inferred generic type
所以我想实现一个特征,使 运行 slick 的查询具有通用的执行功能。
从下面的代码中可以看出,我有一个特征在 class 上有一个类型参数,另一个在方法上定义了类型参数。
当我编译时,方法泛型类型的特征可以编译(不提供任何类型参数)但另一个没有。
为什么???我尝试提供 class 类型参数 UserTable 或 User(我的巧妙 table def 和预测大小写 class),但其中 none 有效。错误只是说 "expects DBIO[UserTable] but actual MySQLDriver.StreamingDriverAction"
非常感谢任何帮助。
非常感谢!!!
class DAO @Inject()(val configProvider: DatabaseConfigProvider) extends
ManagementAppDatabase {
private val users = TableQuery[UserTable]
def findUserByEmail(email: String): Future[Option[User]] = {
execute(users.filter(_.email === email).result.headOption)
}
}
trait ManagementAppDatabase {
val configProvider: DatabaseConfigProvider
def execute[T](dBIO:DBIO[T]): Future[T] = configProvider.get[JdbcProfile].db.run(dBIO)
}
trait ManagementAppDatabase[T] {
val configProvider: DatabaseConfigProvider
def execute (dBIO:DBIO[T]):Future[T]=configProvider.get[JdbcProfile].db.run(dBIO)
}
如果您扩展例如ManagementAppDatabase[User]
,那么你只能在DBIO[User]
上调用execute
。但是 users.filter(_.email === email).result.headOption
是 DBIO[Option[User]]
。就是这样。
所以我想实现一个特征,使 运行 slick 的查询具有通用的执行功能。
从下面的代码中可以看出,我有一个特征在 class 上有一个类型参数,另一个在方法上定义了类型参数。
当我编译时,方法泛型类型的特征可以编译(不提供任何类型参数)但另一个没有。
为什么???我尝试提供 class 类型参数 UserTable 或 User(我的巧妙 table def 和预测大小写 class),但其中 none 有效。错误只是说 "expects DBIO[UserTable] but actual MySQLDriver.StreamingDriverAction"
非常感谢任何帮助。
非常感谢!!!
class DAO @Inject()(val configProvider: DatabaseConfigProvider) extends
ManagementAppDatabase {
private val users = TableQuery[UserTable]
def findUserByEmail(email: String): Future[Option[User]] = {
execute(users.filter(_.email === email).result.headOption)
}
}
trait ManagementAppDatabase {
val configProvider: DatabaseConfigProvider
def execute[T](dBIO:DBIO[T]): Future[T] = configProvider.get[JdbcProfile].db.run(dBIO)
}
trait ManagementAppDatabase[T] {
val configProvider: DatabaseConfigProvider
def execute (dBIO:DBIO[T]):Future[T]=configProvider.get[JdbcProfile].db.run(dBIO)
}
如果您扩展例如ManagementAppDatabase[User]
,那么你只能在DBIO[User]
上调用execute
。但是 users.filter(_.email === email).result.headOption
是 DBIO[Option[User]]
。就是这样。