我将Apache Ignite与类注释一起使用,如"Query Configuration by Annotations"中所述。
我们应该如何处理班级变更?例如,如果在我的应用程序的v1和v2中添加了新属性,会发生什么情况? 先前的值是否反序列化?我可以指定默认值吗?
我找不到有关此主题的任何文档。我尝试了一个简单的用例,似乎新属性为null。我该如何处理?
根据@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更改新字段来更新现有记录?怎么样?
解决了我的问题。这是由于我的班级是使用Scala编写的,并带有一些特定于Scala的类型(“ Map”,...)。我的应用程序使用客户端模式连接到Ignite,因此从sqlline
实用程序执行UPDATE时,Ignite无法反序列化类型。
现在,我将类切换为普通POJO,现在可以更新架构和更新数据。
答案 0 :(得分:2)
只需通过添加新字段来更新Java类,它将被存储并可以被读回而没有任何问题。您可能会因为两个原因将null视为新字段的值:
如果需要使用SQL访问新字段,请使用ALTER TABLE命令将字段添加到SQL模式。