Quel est le meilleur moyen de charger un graphe d'objets Hibernate avant de l'utiliser dans une interface utilisateur?

StackOverflow https://stackoverflow.com/questions/79843

  •  09-06-2019
  •  | 
  •  

Question

La situation est la suivante:

  • Vous avez un contexte Hibernate avec un graphe d'objet qui a des paresseux chargement défini.
  • vous voulez utiliser les objets Hibernate dans votre interface utilisateur en tant que est sans avoir à copier les données quelque part.
  • Il existe différentes interfaces utilisateur contextes qui nécessitent différentes quantités de données.
  • Les données sont trop gros à juste envie de charger le tout graphique à chaque fois.

Quel est le meilleur moyen de charger tous les objets appropriés dans le graphe d'objets de manière configurable afin de pouvoir y accéder sans avoir à revenir à la base de données pour charger plus de données?

Toute aide.

Était-ce utile?

La solution

Supposons que vous ayez le client et qu’à un moment donné, vous ayez quelque chose à faire avec ses commandes et qu’il ait peut-être un bonus pour ses commandes.

Ensuite, je définirais un référentiel avec une interface fluide qui me permettrait de dire quelque chose comme:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

Et là, vous avez le client avec tout ce dont vous avez besoin. C'est de préférence que vous sachiez à l'avance ce dont vous aurez besoin pour l'opération en cours. De cette façon, vous éviterez des déplacements non souhaités dans la base de données (les nouveaux développeurs de votre équipe le feront généralement: appelez une propriété et ne vous rendez pas compte du fait qu'il s'agit en fait d'un appel à la base de données)

Autres conseils

S'il s'agit d'une application Web et que vous utilisez Spring, OpenSessionInViewFilter pourrait être la solution à vos problèmes.

Une approche que nous utilisons dans nos projets consiste à créer un service pour chaque vue que vous avez. Ensuite, la vue récupère le sous-graphique dont vous avez besoin pour cette vue spécifique, en essayant toujours de réduire le nombre de sqls envoyés à la base de données. Par conséquent, nous utilisons beaucoup de jointures pour obtenir les n: 1 objets associés.

Si vous utilisez une application de bureau à 2 niveaux directement connectée à la base de données, vous pouvez simplement laisser les objets attachés et charger automatiquement des données supplémentaires à tout moment. Sinon, vous devez le rattacher à la session et initialiser l'association dont vous avez besoin avec Hibernate.initialize (entité Object, String propertyName)

.

(Mémoire insuffisante, peut-être pas correcte à 100%)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top