Ошибка конструктора класса дел в Scala при использовании в качестве стратегии POJO в постоянстве Ignite - PullRequest
0 голосов
/ 18 января 2019

У меня есть класс дел в Scala:

class StateCache(greeting: String, first_name: String, last_name: String)

Я использую Spark + Ignite, чтобы иметь кеш сквозной записи, который сохраняется в Кассандре.Когда для файла persistence-settings.xml задано значение:

<persistence keyspace="testing_ignite" table="people_test">
    <keyPersistence class="java.lang.Long" strategy="PRIMITIVE" column="index"/>
    <valuePersistence class="StateCache" strategy="POJO"/>
</persistence>

, я получаю следующую ошибку: Java class 'StateCache' couldn't be used as POJO cause it doesn't have no arguments constructor.Я добавил в пустой конструктор, но это не устраняет ошибку.Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 18 января 2019

Согласно документации для POJO (выделение мое):

Хранит каждое поле объекта в виде столбца соответствующего типа в таблице Cassandra. Предоставляет возможность использовать вторичные индексы Cassandra для полей объекта. Может использоваться только для объектов POJO в соответствии с соглашением Java Beans и с полями простого типа Java, которые могут быть непосредственно сопоставлены с соответствующими типами Cassandra.

Ваш класс StateCache не соответствует спецификации Java Beans. Чтобы это исправить, вам нужно:

  • объявить все поля как var (вместо val)
  • используйте @BeanProperty аннотацию на них
  • объявить пустой конструктор

Код будет выглядеть так:

class StateCache(@BeanProperty var greeting: String, 
                 @BeanProperty var first_name: String, 
                 @BeanProperty var last_name: String) {
    def this() {
        this(null,null,null);
    }
}

Это не идиоматическая Scala, но это то, что вам нужно для взаимодействия с миром, который использует соглашения Java.

...