我有一个包含 2 个主列的表格:名称和不带重音符号的名称。 我希望 Hibernate 在第一个更改时更新第二个:
@Column(name = "name")
public String getName() {
return this.name;
}
public void setName(String s) {
this.name = s;
this.noAccentName = RemoveDiacritics(name); //remove diacritics from name
}
@Column(name = "noaccent_name")
public String getNoAccentName() {
return this.noAccentName;
}
public void setNoAccentName(String s) {
this.noAccentName = s;
}
这是可行的,但它有一个开销:名称的 setter 将对象设置为脏,并且 hibernate 想要一直更新它......:(
当“name”以干净的方式更改时,如何要求 hibernate 更新“noAccentName”?
非常感谢。
最佳答案
您找到了拦截器,但从 Hibernate 4 开始,执行此类操作的推荐方法是使用 Callback methods 。事实上,我在 Hibernate 4 中根本找不到拦截器,所以如果你这样做的话,你可能没有升级路径。
我相信你想做的是这样的:
@Column(name = "name")
public String getName() {
return this.name;
}
public void setName(String s) {
this.name = s;
}
@PrePersist
private void updateNoAccentName() {
this.noAccentName = RemoveDiacritics(this.name);
}
@Column(name = "noaccent_name")
public String getNoAccentName() {
return this.noAccentName;
}
private void setNoAccentName(String s) {
this.noAccentName = s;
}
Hibernate 将负责在保存对象之前更新 noAccentName。请注意,我还将 setNoAccentName 方法设为私有(private),因为无法从 noAccentName 转换为名称并获得正确的重音。
关于java - hibernate:根据另一列更新一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228322/