it-roy-ru.com

Уточняющая терминология: "Увлажнение" объекта: выбор свойств из БД

В контексте ORM/Lazy загрузки объектов мое понимание термина «гидратация» выглядит следующим образом:

«Увлажнение» описывает процесс заполнения некоторых или всех ранее не заселенных атрибутов объекта, извлеченных с использованием отложенной загрузки.

Например: класс Author загружается из базы данных:

@Entity
class Author
{
     @Id
     long id;
     List<Book> books;
}

Изначально коллекция books не заполняется.

Насколько я понимаю, процесс загрузки коллекции books из базы данных называется «увлажнение» коллекции.

Является ли это определение правильным, и является ли термин общим местом? Есть ли еще один более общий термин, который я должен использовать для этого процесса?

59
Marty Pitt

Hydrate начинался как термин для заполнения экземпляра (но пустого) объекта-модели значения из БД (особенно в Hibernate.)

Различные другие ORM и инструменты, такие как BizTalk, используют Hydrate и другую связанную терминологию (например, BizTalk использует термин Dehydrated, чтобы означать, что экземпляр доступен, но еще не заполнен).

Лично я не склонен к избыточным пересмотрам терминологии, заполнено означает то же самое, без переизобретения языка. Это ничего не добавляет и приводит к путанице (обычная первая мысль о том, чтобы встретить заново изобретенные термины: это что-то иное и волшебное?).

Расширение BizTalk этого стиля языка, в частности Dehydrated, является избыточным. Я ожидаю, что люди не забыли, как сказать, empty или clear?

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

На данный момент Hibernate и другие продукты ORM использовали эти термины в течение многих лет, поэтому Hydrate (и Dehydrate) останутся здесь.

107
ocodo

В номенклатуре Hibernate гидратация - это когда ResultSet JDBC преобразуется в массив необработанных значений :

final Object[] values = persister.hydrate(
    rs, id, object,
    rootPersister, cols, eagerPropertyFetch, session
);

final Object[] values = persister.hydrate(
    rs, id, object,
    rootPersister, cols, eagerPropertyFetch, session
);

Гидратированное состояние сохраняется в текущем запущенном контексте постоянства как объект EntityEntry , который инкапсулировал моментальный снимок объекта во время загрузки. Гидратированное состояние затем используется:

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

Обратная операция называется дегидратация и копирует состояние объекта в оператор SQL INSERT или UPDATE.

5
Vlad Mihalcea

гидратация это свободный термин. В нашей компании мы используем «регидратацию» в качестве термина для загрузки всех свойств объекта целого графа объекта. Вот пост , в котором говорится о различных уровнях гидратации (опять же, это общее использование, хотя они используются в контексте спящего режима).

4
Aravind R. Yarram

Я думаю, что термин «гидрат (ы)» в контексте ORM просто означает, что среда дает вам объекты. Таким образом, объекты «гидратируются» ORM после извлечения данных из хранилища. Этот термин может применяться в любое время, когда среда ORM дает вам объект/график, который представлен в магазине.

2
hvgotcodes

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

замените спящий режим на имя по своему выбору

0
jpertino

Hydration - это общий термин домена ORM, означающий метод , с помощью которого возвращается результат запроса. Это не процесс, не глагол, не действие или событие, которое происходит, а существительное. Следовательно, гидратирование может означать только использование гидратации, то есть использование этого конкретного метода , ничего другого и ничего не приносит само по себе, поэтому никогда не следует использовать . Определенная гидратация может создавать экземпляр объекта и заполнять его перед возвратом его ссылки, но гидратация в целом не означает заполнение. Разные гидратации возвращают разные структуры:

  • единственное скалярное
  • массив скаляров
  • массив массивов
  • массив объектов
  • скаляры для сбора объектов
  • массивы сбора объектов
  • собирать другие предметы
  • ...Больше

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

0
cprn