web-dev-qa-db-fra.com

Clarifier la terminologie: "hydrater" une entité: extraire des propriétés de la base de données

Dans le contexte de l'ORM/chargement paresseux d'entités, ma compréhension du terme «hydratation» est la suivante:

"Hydratation" décrit le processus de remplissage de tout ou partie des attributs précédemment non renseignés d'une entité extraite à l'aide du chargement différé.

Ex: la classe Author est chargée de la base de données:

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

Initialement, la collection books n'est pas renseignée.

D'après ce que j'ai compris, le processus de chargement de la collection books à partir de la base de données est appelé "hydratation" de la collection.

Cette définition est-elle correcte et le terme lieu commun? Existe-t-il un autre terme plus courant que je devrais utiliser pour ce processus?

59
Marty Pitt

Hydrate a commencé comme un terme pour peupler un objet/modèle de valeur instancié (mais vide) à partir d'une base de données (en particulier dans Hibernate.)

Divers autres ORM et outils tels que BizTalk utilisent Hydrate et d'autres termes apparentés (par exemple, BizTalk utilise le terme Déshydraté pour signifier qu'une instance est disponible mais qu'elle n'a pas encore été remplie.)

Personnellement, je suis opposé aux révisions de terminologie redondantes, peuplé signifie la même chose, sans réinventer le langage. Cela n’ajoute rien et conduit à la confusion (première idée courante lorsqu’on rencontre des termes réinventés: est-ce quelque peu différent et magique?).

L'extension BizTalk de ce style de langage, en particulier déshydraté est redondante. Je suppose que les gens n’ont pas oublié comment dire,emptyouclear?

Hydrated et ses métaphores associées sont essentiellement des outils marketing, conçus pour différencier Hibernate des produits concurrents.

À ce stade, Hibernate et d'autres produits ORM utilisent ces termes depuis de nombreuses années. Hydrate (et déshydrater) sont donc là pour rester.

107
ocodo

Dans la nomenclature Hibernate, hydratation correspond à la transformation d'un JDBC ResultSet en un tableau de valeurs brutes :

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

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

L'état hydraté est enregistré dans le contexte de persistance en cours d'exécution en tant qu'objet EntityEntry , qui encapsule l'instantané de l'entité au moment du chargement. L'état hydraté est ensuite utilisé par:

  • le mécanisme de vérification sale par défaut, qui compare les données de l'entité actuelle à l'instantané au moment du chargement
  • le cache de second niveau, dont les entrées sont construites à partir de l'instantané de l'entité au moment du chargement

L'opération inverse s'appelle déshydratation et copie l'état de l'entité dans une instruction SQL INSERT ou UPDATE.

5
Vlad Mihalcea

l'hydratation est un terme vague. Dans notre société, nous utilisons le terme "réhydratation" pour charger toutes les propriétés d'objet d'un graphe d'objet entier. Voici un article qui parle de différents niveaux d'hydratation (encore une fois, c'est un usage général bien qu'ils utilisent dans le contexte de l'hibernation).

4
Aravind R. Yarram

Je pense que le terme «hydrate (s)» dans le contexte de ORM signifie simplement que le cadre vous donne des objets. Ainsi, les objets sont «hydratés» par l'ORM une fois les données extraites du magasin. Le terme peut être appliqué chaque fois qu'une structure ORM vous donne un objet/graphique représenté dans le magasin.

2
hvgotcodes

le terme «hydratation» est largement utilisé dans les entrailles de la bibliothèque d'hibernation pour désigner le processus de définition des champs d'un objet récemment chargé. Il est en effet lié à la population de graphes d'objets.
mais est différent du concept de chargement paresseux, c’est-à-dire donner à l’utilisateur un objet à moitié rempli et laisser le reste être chargé à la demande.
l'hydratation est toujours effectuée, paresseusement ou avec impatience et c'est hibernate.
chargement paresseux est juste pour la commodité

remplacez hibernate par le nom de votre choix

0
jpertino

Hydration est un terme général du domaine ORM qui signifie une méthode par laquelle le résultat de la requête est renvoyé. Ce n'est pas un processus, pas un verbe, pas une action ou un événement qui se produit, mais un nom. Par conséquent, hydrating ne peut signifier que l’utilisation d’une hydratation, c’est-à-dire l’utilisation de cette méthode, rien d’autre et n’apporte rien en soi, donc ne doit jamais être utilisé. Une hydratation spécifique peut instancier un objet et le peupler avant de retourner sa référence, mais hydrater en général ne signifie pas peupler. Différentes hydrations rendent différentes structures:

  • scalaire singulier
  • tableau de scalaires
  • tableau de tableaux
  • tableau d'objets
  • scalaires collecteurs d'objets
  • tableaux de collecte d'objets
  • objet collectant d'autres objets
  • ...plus

C'est un détail d'implémentation ORM. Certains ORM offrent plusieurs hydratations et vous pouvez en choisir une en passant un argument au constructeur de requêtes. Certains ne vous donnent pas ce contrôle et le remplacent par une convention qui tente d’être intelligente, ce qui conduit généralement à de fausses hypothèses.

0
cprn