Как обновить элемент таблицы с помощью Hibernate-Criteria, используя Entity-Id - PullRequest
0 голосов
/ 22 февраля 2019

Чтобы завершить мой API, мне нужно обновить элемент моей базы данных, используя Hibernate-Criteria.

Таким образом, в моей базе данных есть любая сущность, называемая Task.Я получаю это Taks, используя Hibernate .createQuery, и я делаю некоторые модификации.Задача objekt будет иметь идентификатор, а также некоторые другие значения.

Я хочу обновить соответствующий объект в моей базе данных, но как я могу передать индекс

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

Как вы можете видеть изВ приведенном выше примере мне кажется, что я смог найти только метод .merge (), который позволяет мне передавать только объект, но не идентификатор.

Как обновить мою сущность в базе данных.Я уже выполнил немало SpringBoot, и я просто хочу что-то похожее на метод put?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Вы можете вызвать метод 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 ); 
}
0 голосов
/ 22 февраля 2019

Этот метод использует 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);
}
0 голосов
/ 22 февраля 2019

Если ваша сущность является временным объектом (не управляется hibernate), вам следует выполнить обновление следующим образом

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