Уточнення термінології - Що означає «зволоження» сутності JPA або Hibernate під час отримання сутності з БД


76

У контексті ORM / Ледачого завантаження сутностей, я розумію термін "гідратація" наступним чином:

"Зволоження" описує процес заповнення деяких або всіх незаселених раніше атрибутів сутності, отриманих за допомогою лінивого завантаження.

Наприклад: клас Authorзавантажується з бази даних:

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

Спочатку booksколекція не заповнюється.

Я розумію, що процес завантаження booksколекції з бази даних називається "Зволоження" колекції.

Чи правильно це визначення та чи загальний термін? Чи є інший більш поширений термін, який я повинен використовувати для цього процесу?


3
Людині, яка проголосувала за закриття питання: я додав приклад, який допоможе пояснити, про що я прошу. Будь ласка, коментуйте, якщо це все ще незрозуміло, і повідомте мені, що я можу пояснити.
Марті Пітт,

Відповіді:


131

Гідрат починався як термін для заповнення екземпляра (але порожнього) значення-об'єкта / моделі з баз даних (зокрема, у режимі глибокого сну).

Різні інші ORM та інструменти, такі як BizTalk, використовують гідрат та іншу пов’язану термінологію (наприклад, BizTalk використовує термін зневоднений, щоб означати, що екземпляр доступний, але ще не заповнений.)

Особисто я не люблю зайвих переглядів термінології, заповнене означає одне і те ж, не передумуючи мови. Це нічого не додає і призводить до плутанини (загальна перша думка про зустріч із знову винайденими термінами: це якось інакше і магічно? ).

Розширення BizTalk цього стилю мови, зокрема дегідратації , зайве. Я сподіваюся, люди не забули, як сказати, порожній чи зрозумілий ?

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

На даний момент Hibernate та інші продукти ORM використовують ці терміни протягом багатьох років, тому гідрат (і дегідрат) тут залишаються.


18
Звичайно, це, однак, це було спочатку, це просто, і як таке воно набагато менш заплутане. Можливо, ви також на цьому етапі зрозуміли, що майже все на рівні програмного забезпечення, навіть бітове значення "true / false" або "1/0" є метафоричним ... Чи варто нам починати називати "true" інакше зараз? Як щодо "майже напевно" щодо Гейзенберга?
ocodo

16
Я думаю, що "гідрат" є набагато кращою метафорою, ніж "заповнювати". Населення пригадує групу колонізаторів, яка переїжджає на чужу територію або незайману територію і «заселяє» її. Там порожній простір, і ви заповнюєте його чимось не пов’язаним (але, мабуть, належить там). Якщо дещо зволожуючи, скажімо, сушений інжир, суть речовини є, але їй не вистачає повноти. Це саме те, що відбувається, коли ви “гідратуєте” об’єкт. Гідрат далеко не є "маркетинговим пухом" - це відмінна метафора.
Kyle Mathews

4
@KyleMathews Ну, пройшло вже три роки з моменту розміщення моєї відповіді, я чітко не пояснив, що "Населений" - це вже існуючий термін для тієї самої діяльності, на даний момент "Гідратований" все ще є граничним терміном і є використовується лише в певних культурах мови / продукту, тоді як "Населений" залишається загальним і ширше вживаним терміном. У будь-якому разі продовжуйте і використовуйте "Гідрат", якщо вам це подобається, особисто я вважаю це претензійним і зачепленим.
ocodo

19
Якщо ви використовуєте "гідрат" навколо людей, які не розуміють цього слова, вам доведеться це пояснити. Чому б просто не використовувати слово, яке вже стане зрозумілим для вашої аудиторії, навіть якщо це не найточніше можливе слово?
Саманта Бранхам

6
Той факт, що ніхто не знає, що повинен означати гідрат, не дивлячись на нього, свідчить про те, що це дурне гучне слово, яке, на жаль, зараз закріпилося в багатьох структурах ORM.
BadHorsie

11

Суб'єкт завантаженого стану

Коли ви отримуєте сутність, Hibernate спробує завантажити її або з кешу другого рівня, або з бази даних.

Суб'єкт завантаженого стану

Якщо сутність не зберігається в кеші другого рівня, тоді виконується запит, а JDBC ResultSetперетворюється на такий, Object[]що містить значення властивості сутності часу завантаження.

Кеш-пам’ять другого рівня зберігає це Object[]при кешуванні сутності. Отже, під час завантаження сутності або з БД, або з кешу другого рівня ви отримаєте Object[]масив значень властивості сутності.

Процес перетворення Object[]завантаженого стану в об'єкт сутності Java називається гідратацією , і він виглядає наступним чином:

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

Завантажений стан зберігається в поточному контексті постійності як об’єкт EntityEntry , і він буде використаний пізніше для механізму перевірки брудних за замовчуванням, який порівнює поточні дані сутності зі знімком часу завантаження.

Завантажений стан також використовується як значення введення кешу для кешу сутності другого рівня.

Зворотна операція перетворення об'єкт Ань , Object[]який використовується при зв'язуванні значення параметрів SQL для INSERT, UPDATEабо DELETEзаяви називається зневодненням .


4

гідратація - вільний термін. У нашій компанії ми використовуємо "регідратацію" як термін, щоб завантажити всі властивості об'єкта цілого графіку об'єкта. Ось допис, який розповідає про різні рівні гідратації (знову ж це загальне використання, хоча вони використовують у контексті сплячого режиму).


2

Я думаю, що термін "гідрат (и)" в контексті ORM просто означає, що фреймворк дає вам об'єкти. Отже, об’єкти «гідратовані» ORM після вилучення даних із сховища. Цей термін можна застосувати будь-коли, коли структура ORM надає вам об’єкт / графік, який представлений у магазині.


0

термін гідратація широко використовується в кишках сплячої бібліотеки для позначення процесу встановлення полів нещодавно завантаженого об'єкта і справді пов'язаний з популяційним графіком об'єктів.
але це відрізняється від концепції лінивого завантаження, тобто надання користувачеві наполовину заповненого об'єкта, а решта завантажується на вимогу.
зволоження завжди виконується, ліниво чи охоче, і це сплячий режим.
ліниве завантаження просто для зручності

замініть сплячий режим на ім'я вашої організації


0

Гідратація - загальний термін домену ORM, що означає метод, за допомогою якого повертається результат запиту. Це не процес, не дієслово, не дія чи подія, що відбувається, а іменник. Тому зволоження може означати лише використання гідратації, тобто використання цього конкретного методу , нічого іншого і нічого не приносить само по собі, тому ніколи не слід використовувати . Конкретна гідратація може створити об'єкт і заповнити його перед тим, як повернути його посилання, але гідратація загалом не означає заповнення. Різні гідратації повертають різні структури:

  • однина скалярна
  • масив скалярів
  • масив масивів
  • масив об'єктів
  • об'єкт збору скалярів
  • об'єкт, що збирає масиви
  • об'єкт, що збирає інші предмети
  • ... більше

Це деталь реалізації ORM. Деякі ORM надають кілька гідратацій, і ви можете вибрати одну, передавши аргумент конструктору запитів, деякі не дають вам цього контролю і замінюють його за домовленістю, намагаючись бути розумним щодо цього, що зазвичай призводить до помилкових припущень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.