2

slick のドキュメントでは、それjava.sql.Blobはすぐにサポートされているタイプの 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滑らかに正しく表現できますか?

4

1 に答える 1

7

この問題はBlobサポートとは関係ありません。エラー メッセージが最も一般的な理由として示唆しているように、「T in Table[T] は * 投影と一致しません」。である必要がありますdef * = (id, last_updated, data) <> (Test.tupled, Test.unapply _)

これは ではまだ機能しないことに注意してくださいbytea。Slick の PostgreSQL ドライバーはBlob、PotgreSQL の "lo" 拡張から blob タイプにマップされます。Array[Byte]を使用する必要がありますbytea

于 2014-04-07T15:18:16.037 に答える