我想覆盖一个setter,以便我可以对数据执行某些功能,这样我就可以为我的实体返回一个计算列。该函数依赖于几列(例如COL1,COL2,...),因此我无法真正拦截任何特定的setter,因为其他值可能尚未填充。 hibernate是否提供某种“finish()”方法,可以在为实体设置值时调用一次?
@Override
@Column(name="COL1")
public String getCol1() {
return this.col1;
}
@Override
public void setCol1(String value) {
super.setCol1(value);
genMagicValue();
}
public String getMagicValue() {
return this.magicValue();
}
答案 0 :(得分:0)
除了hibernate提供的内容之外,是否不可能延迟使用magicValue,以便在第一次调用getMagicValue时调用计算,并且后续调用getMagicValue只返回计算值?
答案 1 :(得分:0)
我不明白你的问题, setCol1可能永远不会被调用(并保留其默认值)。 此外,没有人阻止您使用不同的值调用它两次。
或许您正在寻找的模式是:
boolean magicDone=false;
public String getMagicValue() {
if (!magicDone){
magicDone=true;
genMagicValue();
}
return this.magicValue();
}