【问题标题】:Hibernate should update only certain fields in the databaseHibernate 应该只更新数据库中的某些字段
【发布时间】:2014-08-09 21:26:57
【问题描述】:

我有一个在插入数据时执行的数据库触发器。从应用程序端,我使用休眠来更新由数据库 TRIGGER 更新的同一个表。当我从应用程序端更新数据时,触发器更新的数据被旧数据覆盖。我发现休眠中的缓存值与数据库中的值不同步。有没有合适的方法来解决这个问题?我说的缓存是一级缓存。

EDIT - Hibernate 应该更新数据库中的某些字段,而数据库中的其他字段应该由 TRIGGER 更新。这可能吗?

【问题讨论】:

    标签: java mysql hibernate caching jpa


    【解决方案1】:

    你可以使用刷新:

    session.merge(entity);
    session.flush();
    //the trigger has been called
    session.refresh(entity); 
    //the entity will reflect the trigger changes
    

    【讨论】:

    • 就我而言,对“刷新”的调用也会清理我的新数据。假设我只想更新数据库中的特定字段。这些是 TRIGGER 更改的唯一字段。表的其他字段将从应用程序中修改。假设数据库 NAME 和 DOB 中有两个 colmun。假设 DOB 由 TRIGGER 更新,NAME 由应用程序更新。因此,当我从数据库中检索对象时,我想从数据库中保存新的 NAME 和最新的 DOB(不是缓存的那个)。
    • 那么 DOB 属性应该标记为:@Column(name = "dob", insertable = false, updatable = false)
    【解决方案2】:

    我的问题确实是问题的EDIT中提到的。 Vlad 在 cmets 中提到了该问题的简单解决方案。将列标记为 @Column(name = "dob", insertable = false, updatable = false)。如果休眠更新表,这有助于避免任何重大意外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2023-01-30
      • 2012-04-29
      相关资源
      最近更新 更多