Corda - новый параметр обязателен, должен иметь значение NULL, чтобы эволюция работала - PullRequest
0 голосов
/ 05 февраля 2019

Я запускаю CorDapp, используя Corda Enterprise 3.2 и базу данных SQL Server.Недавно обновив CorDapp, я вижу эту ошибку:

. Причина: java.io.NotSerializableException: net.corda.core.contracts.TransactionState -> net.corda.core.contracts.TransactionState -> data (net.corda.core.contracts.ContractState) -> счета-фактуры (java.util.Set) -> java.util.Set-> Новый параметр foo является обязательным, должен иметь значение NULL для работы эволюции

Почему обновление вызвало это исключение?

1 Ответ

0 голосов
/ 23 июля 2019

Эволюция состояний в Corda требует, чтобы все новые поля, добавленные в состояние, допускали обнуление, так как они могут быть созданы из предыдущих версий состояния, у которых нет поля, nullable является единственным логическим вариантом для создания экземпляров состояний против новогоструктура объекта.

Например ...

data class OldState(val foo: Int)

data class NewState(val foo: Int, var bar: String? = null)

При обновлении с OldState до NewState будет отображаться foo до foo, поскольку свойства идентичны, но будутоставьте bar как ноль, потому что в предыдущем состоянии не было ничего, чтобы заполнить это поле ненулевым значением.

...