如何使用Entity-Id

时间:2019-02-22 08:37:31

标签: java hibernate criteria-api

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

因此,在我的数据库中,有一个名为Task的实体。我使用Hibernate .createQuery获得了Tak,并进行了一些修改。任务对象将具有ID和其他一些值。

我想更新数据库中的各个对象,但是如何传递索引

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

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

如何更新数据库中的实体。我已经做了相当多的SpringBoot,并且我只想要类似put方法的东西?

3 个答案:

答案 0 :(得分:0)

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

 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); 
}

答案 1 :(得分:0)

您可以调用saveOrUpdate()方法。

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

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

 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 ); 
}

答案 2 :(得分:0)

此方法使用的是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);
}