2

私は次のことをしようとしていますが、KeySerializer からの型の不一致が原因で、何らかの理由でコードがコンパイルされません。

implicit val keyspace = ConnectionPool.bigdataKeyspace
  implicit val CF_PAST = ColumnFamily.newColumnFamily(CF, LongSerializer.get, StringSerializer.get)

  def update(model: M) = {
    val batch = keyspace.prepareMutationBatch().setConsistencyLevel(ConnectionPool.CL_WRITE)
    val rk = model.rowkey
    try {

        batch.withRow(CF_PAST, rk)
        .putColumnIfNotNull(model.epoch, model.value, model.ttl)

      batch.execute
      Option(model)

    } catch {
      case e: Exception =>
        logger.warn("Unable to insert past model", e)
        None
    }
  }

コンパイルエラーは次のとおりです」

error: type mismatch;  found   
: com.netflix.astyanax.model.ColumnFamily[Long,String]  required: com.netflix.astyanax.model.ColumnFamily[Comparable[_ >: 
String with Long <: Comparable[_ >: String with Long <: 
Comparable[_ >: String with Long <: 
java.io.Serializable] with java.io.Serializable] with java.io.Serializable] with java.io.Serializable,String] Note: 
Long <: Comparable[_ >: String with Long <: Comparable[_ >: 
String with Long <: Comparable[_ >: String with Long <: 
java.io.Serializable] with java.io.Serializable] with java.io.Serializable] with java.io.Serializable, but Java-defined class ColumnFamily is invariant in type K. 
You may wish to investigate a wildcard type such as `_ <: 
Comparable[_ >: String with Long <: Comparable[_ >: 
String with Long <: Comparable[_ >: String with Long <: java.io.Serializable] with
 java.io.Serializable] with java.io.Serializable] with java.io.Serializable`. 
(SLS 3.2.10)
            batch.withRow(CF_PAST, rk)

これは、文字列ではない KeySerializers を使用する Scala でのみ発生するようです。これに対する回避策はありますか?

4

1 に答える 1

0

ああ、このケースでは KeySerializer が間違っていることに気付きました。ColumnSerializer を設定する必要がありました。

  implicit val CF_PAST = ColumnFamily.newColumnFamily(CF, StringSerializer.get, LongSerializer.get)
于 2013-04-04T20:58:01.880 に答える