Scala 使用play slick,如何使用配置生成的数据库API定义通用组件

Scala 使用play slick,如何使用配置生成的数据库API定义通用组件,scala,playframework,slick,Scala,Playframework,Slick,我正在尝试实现这一点: 该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要 XXXX extends HasDatabaseConfigProvider[JdbcProfile] { import profile.api._ 在我可以使用很多灵活的功能之前,例如表。这是一个问题,因为我需要访问: abstract class BaseTable[E: ClassTag](tag: Tag, schemaName: [String]

我正在尝试实现这一点:

该示例使用显式postgres驱动程序。我正在开发的应用程序使用基于配置的api生成,这意味着我需要

XXXX  extends HasDatabaseConfigProvider[JdbcProfile] {

    import profile.api._
在我可以使用很多灵活的功能之前,例如
。这是一个问题,因为我需要访问:

 abstract class BaseTable[E: ClassTag](tag: Tag, schemaName: [String], tableName: String)
    extends Table[E](tag, schemaName, tableName) {
    val classOfEntity = classTag[E].runtimeClass
    val id: Rep[Long] = column[Long]("id", O.PrimaryKey, O.AutoInc)
  }
但是标记和表都是ConfigAPI的一部分

我喜欢这个实现,并且希望使用尽可能接近它的东西。我在这里找到了一个类似的解决方案,但它有点难以遵循,我也不太喜欢这个结果


我可以实现我想要的模式吗,或者我应该开始寻找替代解决方案吗?

您可以试试这个

BaseTable.scala

  abstract class BaseTable(tag: Tag) extends Table[basetable](tag, "tableName") {
      def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
      def name = column[String]("name")
      def * = (id, name) <>((basetable.apply _).tupled, basetable.unapply)
}
case class basetable(id:Long,name:String)

object basetable{
  implicit val basetableFormat = Json.format[basetable]
}
巴塞雷波斯卡拉酒店

class baseRepo @Inject()(@NamedDatabase("databases name") dbConfigProvider: DatabaseConfigProvider) {

  private val  baseTable = TableQuery[BaseTable]
  private val dbConfig = dbConfigProvider.get[JdbcProfile]
  import dbConfig._

  /**
    * search id 
    * */
  def FindById(id:Long): Future[Seq[basetable]] = db.run(
    baseTable.filter(_.id === id).result
  )
}

不幸的是,这种方法不起作用,因为我无法在继承级别访问db profile api,除非我将所有内容都包装在一个trait中,在这一点上,我对所有组件都失去了可见性