Apache Ignite - как разработать схему / свойства аннотированного класса - PullRequest
0 голосов
/ 22 сентября 2018

Я использую Apache Ignite с аннотациями классов, как описано в «Настройка запроса по аннотациям» .

Как мы должны обрабатывать изменения класса?Например, что произойдет, если из моего приложения v1 и v2 я добавлю новое свойство?Предыдущие значения десериализованы?Могу ли я указать значение по умолчанию?

Я не могу найти документацию по этой теме.Я попытался с простым вариантом использования и кажется, что новые свойства являются нулевыми.Как я могу справиться с этим?

ОБНОВЛЕНИЕ

Следуя советам @dmagda, я попытался добавить свойство в свой класс, добавив его в таблицу с помощью ALTER TABLE MYTABLE ADD COLUMN myNewProperty varchar;, а затем изменив его значение с помощьюUPDATE MYTABLE SET myNewProperty='myDefaultValue'.
Но, к сожалению, запустив обитель UPDATE Я получаю исключение: Error: class org.apache.ignite.binary.BinaryObjectException: Failed to unmarshal object with optimized marshaller (state=50000,code=0)

Можно обновить существующие записи, изменив новые поля с помощью SQL?Как?

ОБНОВЛЕНИЕ 2

Решил мою проблему.Это было вызвано тем, что мой класс был написан на scala с некоторыми специфическими типами scala ('Map', ...).Мое приложение подключается к Ignite с использованием режима клиента, поэтому при выполнении UPDATE из sqlline утилита Ignite не смогла десериализовать типы.Теперь я переключил свой класс на обычный POJO, и теперь я могу обновлять схему и обновлять данные.

1 Ответ

0 голосов
/ 22 сентября 2018

Просто обновите свой класс Java, добавив новое поле, и оно будет сохранено и может быть прочитано без каких-либо проблем.Вы можете увидеть значение NULL в качестве значения нового поля по двум причинам:

  • Приложение не установило какое-либо конкретное значение
  • Вы читаете из Ignite староеобъект, который хранился до того, как вы обновили свой класс и, таким образом, новое поле там не было.

Если вам нужно получить доступ к новому полю с помощью SQL, используйте команду ALTER TABLE, чтобы добавить поле в схему SQL.

...