2014-04-07 2 views
1

slick의 설명서에서는 java.sql.Blob이 지원되는 유형 중 하나이며 bytea 열을 나타내는 데 사용하려고합니다.매끄러운 2.0.1에서 포스트그레스`bytea` 타입을 어떻게 표현합니까?

import scala.slick.driver.PostgresDriver.simple._ 
import java.sql.{ Timestamp, Blob } 

case class Test(id: Int, last_updated: Timestamp, data: Blob) 

class Tests(tag: Tag) extends Table[Test](tag, "tests") { 
    def data = column[Blob]("data") 
    def last_updated = column[Timestamp]("last_updated") 
    def id = column[Int]("id", O.PrimaryKey) 
    def * = (id, last_updated, data) 
} 

오류 메시지는 다음과 같습니다 :

Multiple markers at this line 
    - No matching Shape found. Slick does not know how to map the given types. Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported 
    type in a Query (e.g. scala List). Required level: scala.slick.lifted.ShapeLevel.Flat Source type: (scala.slick.lifted.Column[Int], scala.slick.lifted.Column[java.sql.Timestamp], 
    scala.slick.lifted.Column[java.sql.Blob]) Unpacked type: utils.Test Packed type: Any 
    - implements scala.slick.lifted.AbstractTable.$times 
    - type mismatch; found : (scala.slick.lifted.Column[Int], scala.slick.lifted.Column[java.sql.Timestamp], scala.slick.lifted.Column[java.sql.Blob]) required: 
    scala.slick.lifted.ProvenShape[utils.Test] 
    - type mismatch; found : (scala.slick.lifted.Column[Int], scala.slick.lifted.Column[java.sql.Timestamp], scala.slick.lifted.Column[java.sql.Blob]) required: 
    scala.slick.lifted.ProvenShape[utils.Test] 

가 어떻게 진행되고 어떻게 올바르게 매끄러운에서 bytea을 나타낼 수 있지만, 다음 코드는 내게 오류를 준다?

답변

5

문제는 Blob 지원과 관련이 없습니다. 오류 메시지가 가장 일반적인 이유로 "T [T] 테이블의 T가 사용자의 프로젝션과 일치하지 않습니다"라고 제안합니다. def * = (id, last_updated, data) <> (Test.tupled, Test.unapply _)이어야합니다.

여전히 bytea에 대해서는 작동하지 않습니다. Slick의 PostgreSQL 드라이버는 Blob을 PotgreSQL의 "lo"확장자에서 blob 유형으로 매핑합니다. byteaArray[Byte]을 사용해야합니다.