java - hibernate:根据另一列更新一列

标签 java hibernate

我有一个包含 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/

相关文章:

java - Android 中 Bundle 的错误数字

java - java中的砖 block 碰撞突破

java - 与常规应用程序的测试类冲突

database - 使用h2数据库时看不到内容 "in-memory"

hibernate firebird - 创建新表

java - 如何在 spring-jpa 中使用 @GenerateValue 获取序列中的下一个值

java - 在同一应用程序中使用 Google Data Store 和 Google App Engine

java - Google Sheets Java API v4 批量更新

java - 何时使用 Spring JPA (Hibernate) Entity Manager 将连接返回到连接池?

java - 使用 Hibernate 将字符串传递到 CriteriaBuilder.equal 方法的 String<Expression> 中