2014-07-22 2 views
0

Я пытаюсь использовать классы шкал Scala как объект в кэшах Gridgain. Но я не могу заставить его работать. Он отлично работает, если я создаю точно тот же объект, что и java-класс.Индексация классов шкалы Scala в GridGain

Это мой TestCase:

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 и т. д.) и комбинации аннотаций в классе case, но ничего не работает. Я должен пропустить что-то принципиальное здесь, но несколько часов испытаний с моей стороны, очевидно, не доходят до меня.

Любые подсказки?

ответ

0

Для скалар, попробуйте использовать @ScalarCacheQuerySqlField в org.gridgain.scalar пакете.

+0

И это сделало трюк. Спасибо! –

Смежные вопросы