如何检测Hyperon持久化引擎中的变更?基于v1.5.54的实体校验咨询
Hyperon 1.5.54:Property层面的实体修改检查与变更标记
针对你使用Hyperon 1.5.54及Hyperon持久化引擎的场景,答案是肯定的——你完全可以从Property对象层面检查实体是否被修改,且实体本身也会跟踪并标记出具体哪些内容发生了变更。下面是具体的细节和用法:
1. 检查单个Property是否被修改
Hyperon的Property对象内置了状态跟踪能力,你可以直接调用它的isModified()方法来判断该属性是否被修改过。这个方法会返回一个布尔值,true表示属性值自上次持久化后发生了变更,false则表示没有变化。
示例代码:
// 假设你已经获取到目标实体对象 YourEntityType targetEntity = hyperonSession.getEntity("your_entity_id"); // 获取特定Property对象 Property statusProp = targetEntity.getProperty("status"); // 检查该属性是否被修改 if (statusProp.isModified()) { System.out.println("Status属性已经被修改"); }
2. 获取实体中所有已修改的Property集合
除了单个属性的检查,实体对象还维护了一个已修改属性的集合,你可以通过getModifiedProperties()方法获取所有发生变更的Property列表。这个方法会返回一个Collection<Property>,里面包含了所有自上次持久化后被修改过的属性。
更实用的是,每个Property对象还提供了getOldValue()和getValue()方法,让你可以对比修改前后的具体值:
示例代码:
// 获取实体所有已修改的属性 Collection<Property> modifiedProps = targetEntity.getModifiedProperties(); // 遍历并输出变更详情 for (Property prop : modifiedProps) { System.out.printf("属性[%s]已变更:旧值=%s,新值=%s%n", prop.getName(), prop.getOldValue(), prop.getValue()); }
注意事项
- 这些状态跟踪功能是Hyperon持久化引擎默认提供的,只要你使用的是官方的持久化实现,无需额外配置即可生效。
- 当你调用实体的
save()或persist()方法完成持久化后,实体的修改标记会被重置,isModified()会回到false状态,getModifiedProperties()也会清空。
内容的提问来源于stack exchange,提问作者AnnKate
相关产品推荐
相关产品推荐

