Apache Ignite-如何演化带注释的类的模式/属性

时间:2018-09-21 22:34:07

标签: java ignite

我将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更改新字段来更新现有记录?怎么样?

更新2

解决了我的问题。这是由于我的班级是使用Scala编写的,并带有一些特定于Scala的类型(“ Map”,...)。我的应用程序使用客户端模式连接到Ignite,因此从sqlline实用程序执行UPDATE时,Ignite无法反序列化类型。 现在,我将类切换为普通POJO,现在可以更新架构和更新数据。

1 个答案:

答案 0 :(得分:2)

只需通过添加新字段来更新Java类,它将被存储并可以被读回而没有任何问题。您可能会因为两个原因将null视为新字段的值:

  • 您的应用程序未将其设置为任何特定值
  • 您正在从Ignite读回一个旧对象,该对象在更新类之前已存储,因此,新字段不在此处显示。

如果需要使用SQL访问新字段,请使用ALTER TABLE命令将字段添加到SQL模式。