ObjectDB-JPA官方文档翻译之(四):Entity数据结构的更新

英文原版:https://www.objectdb.com/java/jpa/entity/schema

持久化字段的转换

只要没有对 @Entity类型的持久化字段的定义进行更新,那么对于ObjectDB来说都是透明的。例如:添加、删除、改变构造函数,方法,和非持久化字段。
如果对持久化字段的定义做了更新,那么ObjectDB将旧的数据对象加载到内存中后,会对旧数据自动进行转换,而当再次存储时,会将其存储到新模式中,规则如下:
对于新模式中的每个字段,

  • 如果旧模式中有与其匹配的字段,则用旧值初始化新模式的相应字段
  • 如果旧模式中没有匹配的字段,则用0、null、false初始化此字段
  • 旧模式中的字段如果在新模式中没有可匹配的字段,那么直接忽略

字段的匹配规则:
对于新模式中的字段,如果旧模式中有相同名称、相同类型或者可转换类型的字段,则认为这两个字段是匹配的

可转换类型规则:

  • 所有数字类型及相关封装类型,彼此之间都可以互相转换:byte char short long float double BigInteger BigDecimal,及采用序号存储方式的枚举类型
  • 所有类型都可以转换到boolean型:0、null转换为false,其它转换为true
  • 所有类型都可以转换成字符串
  • 只包含数字的字符串 可以转换成 数字类型
  • 所有集合和数组类型都可相互转换,只要他们的元素本身的类型是可以相互转换的
  • 从一个对象 转换到 集合,只要集合本身定义的元素类型和单个对象的类型可以转换
  • 任何Map类型之间都可以相互转换,只要彼此的的键类型和值类型可以相互转换:例如从HashMap<int,long> 到TreeMap<long,double>
重命名(类名、包名、字段名)

重命名需要在配置信息中显示地声明这些更新。通过元素配置。

注意:在重命名或者移动类、包等此类修改数据库Schema的操作前,一定要先备份数据库,

默认配置文件包含空的元素。如果元素不是空的,则objectdb会认为schema有更新,会应用元素中的配置的信息。

<schema>
  <package name="com.example.old1" new-name="com.example.new1" />
  <package name="com.example.old2" new-name="com.example.new2">
    <class name="A" new-name="NewA" />
    <class name="B">
      <field name="f1" new-name="newF1" />
      <field name="f2" new-name="newF2" />
    </class>
  </package>
  <package name="com.example.old3">
    <class name="C" new-name="NewC" >
      <field name="f3" new-name="newF3" />
    </class>
    <class name="C$E" new-name="NewC$E" />
  </package>
</schema>

需要注意的是:

  • 元素的name属性必须是非限定的(即不能包括其所在package的全路径),因为规则是当前class的package必须是其父元素package的name所指定的路径。
  • 元素的new-name属性可以是全路径的限定名(如果class从当前package移动到了另一个package),也可以是非限定的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值