2016-12-06 11 views
1

現在Playとplay-slickで遊んでいます。次のコードは私にエラー値の削除はslick.lifted.Queryのメンバーではありません。[T、T#TableElementType、Seq]

class GenericRepository(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] { 
    import driver.api._ 

    implicit val localDateTimeColumnType = MappedColumnType.base[LocalDateTime, Timestamp](
    d => Timestamp.from(d.toInstant(ZoneOffset.ofHours(0))), 
    d => d.toLocalDateTime 
) 

    protected trait GenericTable { 
    this: Table[_] => 
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc) 
    def createdAt = column[LocalDateTime]("created_at") 
    def updatedAt = column[LocalDateTime]("updated_at") 
    } 

    protected class CrudRepository[T <: AbstractTable[_] with GenericRepository#GenericTable](private val tableQuery: TableQuery[T]) { 
    def all = db.run(tableQuery.to[List].result) 
    def create(obj: T#TableElementType) = db.run(tableQuery returning tableQuery.map(_.id) += obj) 
    def delete(id: Long) = db.run(tableQuery.filter(_.id === id).delete) 
    } 
} 

エラー得られます。

value delete is not a member of slick.lifted.Query[T,T#TableElementType,Seq] 

を私はすでに多くのことをグーグルが、何の解決策は、私のために働いていません。例えば、私は 'import driver.apiを取り替えようとしました。 'with' import slick.driver.H2Driver.api。 'は運がありません。

私はScala 2.11.7をplay-slick 2.0.2とPlay 2.5で使用しています。

答えて

2

編集:あなたの貼り付けられたコードから、あなたの問題が表示されます。 Tableslick.relational.RelationalProfile.API.Tableある

protected class CrudRepository[E, T <: Table[E] with GenericRepository#GenericTable](private val tableQuery: TableQuery[T]) { 
    def all = db.run(tableQuery.to[List].result) 
    def create(obj: T#TableElementType) = db.run(tableQuery returning tableQuery.map(_.id) += obj) 
    def delete(id: Long) = db.run(tableQuery.filter(_.id === id).delete) 
    } 

ちょうどに、あなたの定義を変更します(私は型パラメータのみを変更しました)。それは良い探していることを

val crud = new CrudRepository[Redirect,RedirectsTable](Redirects) 

Otherthan:

次に、以下の方法であなたのCrudRepositoryをインスタンス化します。

+0

また、CrudRepositoryメソッドから 'Future'を返すのが理にかなっていると思います。このようなアプローチでは、トランザクション内で操作を実行することはできません。 –

+0

お返事ありがとうございます!残念ながら、これは別のエラーを引き起こします:http://pastebin.com/k2KDemM8 明らかに、Scalaは、両方のクラスのドライバのインポートが同じであることを確認できません。 私の場合、db.runは常にFuture、btwを返します。 – Magnus

+0

私の更新された答えを見てください - あなたのコードをコンパイルします。 –

関連する問題