代码之家  ›  专栏  ›  技术社区  ›  Davide Icardi i3arnon

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

  •  1
  • Davide Icardi i3arnon  · 技术社区  · 6 年前

    "Query Configuration by Annotations" .

    我们应该如何处理类的变化?例如,如果从应用程序的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)

    更新2

    解决了我的问题。这是因为我的类是用scala编写的,带有一些scala特定的类型('Map',…)。我的应用程序使用客户端模式连接到Ignite,因此在执行更新时 sqlline 实用程序Ignite无法反序列化类型。 现在我把我的类改成了纯POJO,现在我可以更新模式和数据了。

    1 回复  |  直到 6 年前
        1
  •  2
  •   dmagda    6 年前

    只需通过添加一个新字段来更新Java类,它就会被存储起来,并且可以毫无问题地读回。可能会将null视为新字段的值,原因有两个:

    • 应用程序未将其设置为任何特定值
    • 您正在从Ignite读取更新类之前存储的旧对象,因此,新字段没有出现在那里。

    如果需要使用SQL访问新字段,那么可以使用altertable命令将字段添加到SQL模式中。