2016-12-06 15 views
1

현재 Play and 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. '행운을 빈다.

저는 스칼라 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) 
    } 

:

그냥 당신의 정의를 변경 (I 유형 매개 변수 만 변경).

그런 인스턴스화 당신의 CrudRepository 다음과 같은 방법 :

이 좋은 찾고 있음을
val crud = new CrudRepository[Redirect,RedirectsTable](Redirects) 

Otherthan.

+0

또한 CrudRepository 메소드에서'Future'를 반환하는 것이 합리적이라고 생각할 수도 있습니다. 이러한 접근 방식으로는 거래 내에서 작업을 수행 할 수 없습니다. –

+0

안녕하세요, 답변 해 주셔서 감사합니다. 불행히도이 결과는 또 다른 오류가 발생합니다 : http://pastebin.com/k2KDemM8 분명히 스칼라는 두 클래스의 드라이버 가져 오기가 동일하다는 것을 알 수 없습니다. db.run은 항상 Future, btw를 반환합니다. – Magnus

+0

업데이트 된 답변을 살펴보십시오. 코드가 컴파일됩니다. –