Как ВЫБРАТЬ частичную сущность, а затем использовать сущность обновить сущность в базе данных? - PullRequest
1 голос
/ 20 января 2020

У меня есть класс сущности с около 70 столбцами. Таблица может иметь около 200 000 строк. Я хочу обновить только один из столбцов для всех 200 000 записей.

Обычно я получаю все сущности и для каждого обновляю сущность новым значением для поля и сохраняю его.

HQL будет выглядеть примерно так: select p from Person p. Это позволяет нам писать Java код, такой как: entity.PhoneNumber = new_value; session.flush();. Проблема в том, что SELECT извлекает ВСЕ 70 столбцов, когда требуется только 2 (первичный ключ и поле, которое нужно изменить).

Мы можем написать HQL следующим образом: select p.Id, p.PhoneNumber from Person p. К сожалению, теперь мы больше не получаем сущности, поэтому сейчас, вместо того, чтобы программировать объектно-ориентированным способом, мы теперь застряли с написанием HQL: update Person set p.PhoneNumber = ? where Id = ?.

Есть ли способ загрузить ЧАСТИЧНУЮ сущность (загрузить объект только с некоторыми заполненными полями, а затем использовать этот объект для внесения изменений и затем сохранить его?

1 Ответ

0 голосов
/ 20 января 2020

Согласно это

1) Для первой части вашего вопроса ответ положительный. Вы можете объявить конструктор сущности следующим образом

@Entity
public class Person
{
   public Person(){} // The jpa required default constructor

   public Person(Long id, String phone){
      this.id = id;
      this.phoneNumber = phone;
   }
   ...
}

, а затем использовать его следующим образом:

select new com.entity.Person(p.Id, p.PhoneNumber)
from Person p

2) Но по той же ссылке:

Класс проекции должен быть полностью определен в запросе сущности и должен определять соответствующий конструктор. Класс здесь не нужно отображать. Это может быть класс DTO. Если он действительно представляет сущность, полученные экземпляры возвращаются в состоянии NEW (не управляется!).

Нельзя ожидать синхронизации с базой данных после обновления этого экземпляра юридическое лицо. Итак, ответ на вторую часть вашего вопроса отрицательный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...