我正在使用Java 8设计一个Hibernate的实体预更新事件监听器。
我创建了一个 StateTracker 类,它来自 PreUpdateEvent ,获取实体的新旧状态和参数名称。此类将参数名称映射到相应的旧状态和新状态对以及延迟评估的布尔 hasChanged ,并按键查询地图(类型为字符串)可通过公共方法获得。
问题是:我需要检查实体 A 中的特定属性,例如它是否命名为 var ,是否会更新事件更改状态。当然,这可以这样做:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified("var") {
/* do stuff... */
}
}
我知道我无法永远拯救世界,但如果有人在 A <中将 的名称更改为 灾难 / strong>,然后上面的代码将被破坏,因为即使是更聪明的重构工具也不会看到 String “var”意味着代表参数的名称 var (现在 灾难 )。
我接受没有更好的方法摆脱这种情况,但我想确保通过反射或其他东西无法获得变量名称。
理想情况下,这可以这样工作:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified(A.class.var.getName()) { // Magic!
/* do stuff... */
}
}
也许注释处理领域的一些巫术可以表现出这样的魔力......
答案 0 :(得分:0)
是通过简单的反射,遍历标签,创建一个哈希集键是字段名称,值是字段的值,然后每次遍历您的集合,如果任何项目状态更改/删除标记实体更新