0

Gridgain キャッシュのオブジェクトとして Scala Case Classes を使用しようとしています。しかし、私はそれを機能させることができません。Java クラスとまったく同じオブジェクトを作成すると、まったく問題なく動作します。

これは私のテストケースです:

class GridGainTest extends FunSuite {
  val grid = GridGain.start("gridgain_mini.xml")
  private val theCache = grid.cache[Long, TestData2]("theCache")

  test("That the basics is working") {
    val tx = theCache.txStart()
    theCache.put(1, new TestData2(1, "Hello", 0))
    theCache.put(2, new TestData2(2, "World", 1))
    tx.commit()

    val q = theCache.queries().createSqlQuery(classOf[TestData2], "parent = ?")

    val qRes1 = q.execute(new java.lang.Long(1)).get()

    assert(qRes1.size() == 1)
   }
}

@BeanInfo
case class TestData(@BeanProperty @GridCacheQuerySqlField(index = true) id: Long,
                    @BeanProperty @GridCacheQuerySqlField(index = true) name: String,
                    @BeanProperty @GridCacheQuerySqlField(index = true) parent: Long)

public class TestData2 {
    @GridCacheQuerySqlField(index = true)
    public final long id;
    @GridCacheQuerySqlField(index = true)
    public final String name;
    @GridCacheQuerySqlField(index = true)
    public final long parent;

    public TestData2(long id, String name, long parent) {
        this.id = id;
        this.name = name;
        this.parent = parent;
    }
}

TestData2 ではテストはパスしますが、TestData ではサイズ = 0 のためアサートで失敗します。

ケースクラスでプロパティタイプ(java.lang.Longなど)と注釈の組み合わせのいくつかの組み合わせを試しましたが、何も機能しないようです。ここで何か基本的なことを見逃しているに違いありませんが、私の側で数時間のテストを行っても、明らかにすべてを理解することはできません。

ヒントはありますか?

4

1 に答える 1

0

Scalar の場合は、パッケージで使用@ScalarCacheQuerySqlFieldしてみてください。org.gridgain.scalar

于 2014-07-23T00:25:05.353 に答える