所以我想实现一个特性来使用一个通用的执行函数来运行光滑的查询。
从下面的代码中可以看出,我有一个特性在类上有一个类型参数,另一个在方法上定义了类型参数。
当我编译时,具有方法泛型类型的特征编译(不给出任何类型参数)但另一个没有。
为什么???我试图给出类型参数UserTable或User(我的slick表def和投影案例类),但它们都不起作用。错误只是说“期待DBIO [UserTable],但实际是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)
}
答案 0 :(得分:1)
如果你延长,例如ManagementAppDatabase[User]
,那么您只能在execute
上致电DBIO[User]
。但users.filter(_.email === email).result.headOption
是DBIO[Option[User]]
。就是这样。