当前位置: 首页 > 知识库问答 >
问题:

Hibernate更新特定实体字段

海叶秋
2023-03-14

以下是我要保存(创建/更新)的实体模型:

@Entity
@Table(name = "EVENT")
public class EventEntity {

    @Column(name = "NATURE")
    private String nature;

    @Column(name = "END_DATE")
    private LocalDate endDate;

    @Column(name = "NOTIFIED", insertable = false)
    @NotNull
    private Boolean notified;

    // Getter - Setter - Builder
}

有两种方法可以更新此实体:

    < li >第一个更新除< code>notified属性以外的所有属性的人 < li >第二个更新< code>notified属性的仅

有没有办法告诉Hibernate忽略某个特定方法的某些字段?我需要创建两个不同的特定dao方法吗?我是否需要为经典的< code>save方法保留< code>updatable=false,并创建一个自定义方法来只更新< code>notified属性?最佳实践?

共有1个答案

湛钊
2023-03-14

我建议你分开做。

>

  • 对于第一次更新(所有字段,但已通知),我确实会使用updatable=false,它告诉hibernate不要将该字段包含在SQL语句中。这样您只需要调用thas保存()方法。

    对于第二次更新(仅通知字段),进行自定义查询:

    @Modifying
    @Query("UPDATE EventEntity e SET e.notified = ?2 WHERE e.id = ?1")
    @Transactional
    void customUpdate(UUID itemId, boolean notified);
    

    (假设条件是ID)

    这应该是你需要的方式。希望有帮助。

  •  类似资料:
    • 我正在为我的新项目使用android room持久性库。我想更新表的某些字段。我在我的中尝试过- 但是,当我尝试使用此方法进行更新时,它会更新实体的每个字段,在这些字段中,它与tour对象的主键值相匹配。我已使用 它正在工作,但在我的情况下会有很多查询,因为我的实体中有很多字段。我想知道如何更新某些字段(不是全部),如,id=1;(id是自动生成主键)。

    • 我有一个批处理过程,它正在为一组实体重新计算数据。通过Hibernate从DB获取实体列表: 当流程运行时,某些实体似乎正在分离,导致两种症状: 当尝试获取惰性数据时,我得到一个异常: 在我的第一次尝试中,我试图通过调用inside

    • 问题内容: 是否有更新的方式只有一些领域使用该方法的实体对象从春数据JPA? 例如,我有一个这样的JPA实体: 通过其CRUD存储库: 在Spring MVC中,我有一个控制器,该控制器获取用于更新它的对象: 我知道我可以使用来加载用户findOne,然后更改其名称并使用save…来更新它。但是,如果我有100个字段,而我想更新其中的50个字段,则更改每个值可能会很烦人。 有没有办法告诉类似“ 保

    • 有没有办法使用Spring Data JPA中的方法只更新实体对象的某些字段? 我知道我可以使用加载用户,然后更改其名称并使用更新它...但是,如果我有100个字段,我想更新其中的50个,这可能是非常恼人的更改每个值… 难道没有办法告诉像“保存对象时跳过所有空值”这样的事情吗?

    • 我想这可能是一个新手问题,但我仍然想知道一些答案。 假设存在实体:医院和医生(多对多)。假设在我的controller类中,我必须获取所有现有的医生和医院,然后在特定的医院雇佣一名医生 它当然不起作用,因为--据我所知--我已经在控制器中获取了所有的医生和医院,然后在hireDoctor方法中,我们打开了传递常规Java对象的trasaction,这些对象不在会话中。 我知道,我可以用一个特殊的身

    • 我实现了两个 entites。规则实体和 RestCall 实体如下所示: RuleEntity RestCallEntity 我在 json 终结点中收到一条规则。比我将收到的 json 规则转换为规则实体并调用 当我只是更改规则的名称时,更新工作正常。但是当我更改它的名称时,它看起来像Hibernate尝试创建一个新的重新调用,即使它已经有一个ID。我得到以下异常。 原因:ruleentity