如何使用 Entity-Id 使用 Hibernate-Criteria 更新 table 元素

How do I update a table element with Hibernate-Criteria using Entity-Id

为了完成我的 API 我需要使用 Hibernate-Criteria 更新我的数据库的一个元素。

所以在我的数据库中有任何名为 Task 的实体。我使用 Hibernate .createQuery 获得了这个 Taks 并做了一些修改。 Task objekt 将有一个 id 和一些其他值。

我想更新数据库中的相应对象,但如何传递索引

public void megreTask(Task entity, String id) {
    getSession().merge(entity); // how to pass id ?
}

从上面的例子可以看出,我似乎只能找到.merge()方法,它只允许我传入一个对象而不能传入id。

如何在数据库中更新我的实体。我已经完成了一些 SpringBoot,我只想要一些与 put 方法类似的东西?

如果您的实体是临时对象(不受休眠管理),那么您应该像这样进行更新

 public void megreTask(Task entity, String id) {
    Task toBeUpdated = getSession().get(Task.class, id); 
    toBeUpdated.setName(entity.getName()); //set properties which should be updated
    getSession().update(toBeUpdated); 
}

您可以调用 saveOrUpdate() 方法。

public void megreTask(Task entity, String id) {
    entity.setId(id);
    getSession().saveOrUpdate(entity); 
}

以另一种方式,您需要从数据库加载数据更新数据库实体中的数据

 public void megreTask(Task entity, String id) {
    Task dbTask = getSession().get(Task.class, id);
    dbTask .setValue1(entity.getValue1());
    dbTask .setValue2(entity.getValue2());
    getSession().update(dbTask ); 
}

此方法正在使用 CriteriaBuilder。

    CriteriaBuilder cb = this.getSession().getCriteriaBuilder();
    CriteriaUpdate<Entity> update = cb.createCriteriaUpdate(Entity.class);

    // set the root class
    Root e = update.from(Entity.class);

    // set update and where clause
    update.set("property", newValue);
    update.where(cb.equalTo(e.get("Entity-Id"), valueOfEntityId));

    // perform update
    this.getSession().createQuery(update).executeUpdate();

来源:Hibernate Criteria

如果您想更新该实体的所有属性, 你可以使用

//load entity by its id
Entity entity = (Entity)this.getSession().load(Entity , entityId);

if(entity != null) {
    // accessing setter
    entity.setParameter(updatedValue);
    this.getSession().update(entity);
}