使用 Play with Scala 和 Slick 实现不同文件表之间的一对多关系

One-to-many relationship between tables on different files using Play with Scala and Slick

我正在尝试映射 音乐 专辑 之间的关系 - 音乐属于一张专辑,而一张专辑可能有很多音乐。

根据 Slick's docs 这应该是相当简单的......但是,我没有像文档中那样将我的 table 放在一个文件中,这就是我的问题出现的地方:我不知道如何在需要映射外键时从 MusicRepository.scala 正确访问相册 table val。

这是我收到的错误消息:not found: value AlbumRepository

我试过import dal.AlbumRepository但是没用...
这是否也与我的 val albumsprivate 有关 - 或者这是另一个问题?

AlbumRepository.scala

package dal

/* Omitted for brevity */

@Singleton
class AlbumRepository @Inject()(dbConfigProvider: DatabaseConfigProvider)
                               (implicit ec: ExecutionContext) {

  private val dbConfig = dbConfigProvider.get[JdbcProfile]

  import dbConfig._
  import driver.api._

  private val albums = TableQuery[Albums]

  /* Omitted for brevity */

  // Albums table
  private class Albums(tag: Tag) extends Table[Album](tag, "albums") {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

    def name = column[String]("name")

    def description = column[String]("description")

    def * = (id, name, description) <>((Album.apply _).tupled, Album.unapply)
  }

}

MusicRepository.scala

package dal

import javax.inject.Inject

import models.Music
import play.api.db.slick.DatabaseConfigProvider
import slick.driver.JdbcProfile

import scala.concurrent.{Future, ExecutionContext}

class MusicRepository @Inject()(dbConfigProvider: DatabaseConfigProvider)
                               (implicit ec: ExecutionContext) {

  /* Omitted for brevity */

  // Musics table
  private class Musics(tag: Tag) extends Table[Music](tag, "musics") {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

    def albumId = column[Long]("album_id")

    def title = column[String]("title")

    def lyrics = column[String]("lyrics")

    def year = column[Int]("year")

    def * = (id, albumId, title, lyrics, year) <>((Music.apply _).tupled, Music.unapply)

    //
    // THIS IS WHERE I AM GETTING THE ERROR MESSAGE
    //
    def album = foreignKey("album_fk", albumId, AlbumRepository.albums)(_.id)
  }

}

提前致谢!

我认为您需要导入 dal.AlbumRepository.Albums,是的,您可能需要导入 public。 否则你也可以跳过 slick 中的所有外键内容。没有它也能很好地工作。