我正在用Java 8设计一个Hibernate的实体预更新事件监听器。
我已经创建了一个StateTracker类,从PreUpdateEvent获取实体的新状态和旧状态以及参数名称。该类将参数名映射到相应的新旧状态对和一个延迟求值的布尔值hasChanged,并通过一个公共方法实现按键(类型为String)查询映射。
问题是:我需要检查是否一个特定的属性从一个实体 a ,说它被命名为var,将有它的状态由更新事件改变。当然,这可以这样做:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified("var") {
/* do stuff... */
}
}
我知道我不能总是拯救世界,但是如果有人在A中把var name更改为catastrophe,那么上面的代码就会被破坏,因为即使是更聪明的重构工具也不会看到字符串 "var"是用来表示参数var的名称(现在是catastrophe)。
我接受没有更好的办法摆脱这种情况,但我想确定没有办法通过反射或其他方式获得变量名。
理想情况下,应该是这样的:
void foo(PreUpdateEvent event) {
StateTracker stateTracker(event);
if(stateTracker.isPropertyModified(A.class.var.getName()) { // Magic!
/* do stuff... */
}
}
也许注释处理领域的一些魔法可以执行这样的魔法…
是通过简单反射,遍历选项卡,创建哈希集键是字段名值是字段值然后每次遍历集合如果任何项状态更改或删除标记为更新