play-slick을 사용하여 열거 형을 업데이트하는 방법을 알아내는 데 문제가 있습니다.play slick updating 열거 형 열
object TestQueries extends TableQuery[Tests](new Tests(_)) {
def updateStatus(id: String, newStatus: TestStatus) = {
TestQueries.filter(_.id === id).map(_.status).update(newStatus)
}
}
[error] Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection,
[error] you use an unsupported type in a Query (e.g. scala List),
[error] or you forgot to import a driver api into scope.
[error] Required level: slick.lifted.FlatShapeLevel
[error] Source type: slick.lifted.Rep[models.TestStatus.Value]
[error] Unpacked type: T
[error] Packed type: G
[error] TestQueries.filter(_.id === id).map(_.status).update(newStatus)
[error] ^
:
class Tests(tag: Tag) extends Table[Test](tag, "tests") {
implicit val statusColumn = MappedColumnType.base[TestStatus, String](_.toString, TestStatus.withName)
override def * = (id, status) <> ((Test.apply _).tupled, Test.unapply)
val id = column[String]("id", 0.PrimaryKey)
val status = column[TestStatus]("status")
}
내가 가서 테스트 행을 업데이트하려고, 나는 오류가 발생 :
object TestStatus extends Enumeration {
type TestStatus = Value
val Status1 = Value("Status1")
}
case class Test (
id: String,
status: TestStatus
)
테이블 매핑 :
은 여기 내 열거 및 사례 클래스의
IntelliJ는 TestQueries.filter(_.id === id).map(_.status)
유형이 Query[Nothing, Nothing, Seq]
인 것을 보여 주므로이 문제는 내가 s를 업데이트 함수가 아닌 특정 열에 추가하십시오.
동일한 ID를 사용하여 ID를 업데이트하는 것이 좋습니다.
볼 수 있습니다 보인다. 'TestQuery'가 범위에서 적절한 열 매핑을 가지고 있는지 명확히 할 수 있습니까? 실험을 위해서'TestQueries' 안에'statusColumn' 값을 복사하고 컴파일하는지 확인하십시오. – AdamBat
@AdamBat 내 코드에서 약간 불분명하지만, 다양한 결과 ('TestStatus' 개체 수준뿐만 아니라'TestQueries' 수준)에 대해서도 동일한 결과를 가진 다양한 범위로 열 매핑을 복사하려고했습니다. – itadoatL
복제 된 문제가있는 저장소를 제공 할 수 있습니까? 난 임시 코드를 복사하고 동일한 컴파일러 오류있어. 위의 설명에서 제안한 것처럼'TestQueries'에서'TestStatus' 열 매핑을 복제하면 문제를 해결하는 데 도움이됩니다. 다음은 내가 한 일을 보여주는 요지입니다. https://gist.github.com/Dasiu/ae4fa9bfa9077569e5e07a02aa1493f0 – AdamBat