如何使用 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();
如果您想更新该实体的所有属性,
你可以使用
//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);
}
为了完成我的 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();
如果您想更新该实体的所有属性,
你可以使用
//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);
}