要完成我的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方法的东西?
答案 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();
如果要更新该实体的所有属性,
您可以使用
//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);
}