Hibernate - Comment persister un nouvel élément dans une Collection sans charger l'ensemble de la Collection

J'ai une collection dans mon modèle qui contient un ensemble de "versions précédentes" de mon domaine racine de l'objet. Les versions précédentes sont donc "immuable" et nous ne voudrons jamais à les mettre à jour, et ne veulent ajouter des dernières versions à mesure qu'ils surviennent. En outre, la "versionné' objet de domaine est assez complexe et entraîne de lourdes accès de base de données à récupérer.

Quand j'ai une nouvelle version de l'un de ces objets que je veux l'enregistrer avec les autres, sans que le chargement de l'ensemble. L'Avancée FAQ a quelques conseils sur ce:

Pourquoi ne Hibernate toujours initialiser une collection lorsque je souhaite ajouter ou de supprimer un élément?

Malheureusement, les collections de l'API définit les valeurs de retour des méthodes qui ne peut être calculée par la frappe de la base de données. Il y a trois exceptions à cela: Hibernate peut ajouter à un <bag>, <idbag> ou <list> déclaré avec inverse="true" sans initialisation de la collection; la valeur de retour doit toujours être vrai.

Si vous voulez éviter de base de données supplémentaire de trafic (ie. dans critique pour les performances du code), restructurer le modèle à utiliser seulement plusieurs-à-un les associations. C'est presque toujours possible. Ensuite, utiliser des requêtes en place de la collecte d'accès.

Je suis nouveau à tout cela et je ne suis pas sûr à 100% sur la manière de restructurer le modèle à utiliser seulement plusieurs-à-un les associations. Quelqu'un peut-il me donner un exemple de me diriger vers un tutoriel afin que je puisse apprendre de quelle façon cela résout mon problème?

  • Je pense que ce que j'ai vraiment besoin de 1) pour être en mesure d'utiliser un filtre hibernate' pour récupérer uniquement la tête de révision sur le chargement de la collection (sauf pour les rapports de vérification); puis 2) si cette tête est modifié par une opération (causant deux éléments dans la collection) dire hibernate juste la mise à jour du "chef" (comme n'étant pas la tête plus) et l'insertion de la nouvelle version dans la base de données. Malheureusement, si nous adoptons cette approche, Hibernate semble penser que les éléments qui ont été filtrés (révisions antérieures) ne sont plus associés avec le parent de l'ensemble. réglage immuable= "true" ne semble pas fonctionner.
  • Heureux que nous pourrions les aider. Si vous avez aimé des réponses, à vous de voter pour eux (cliquez sur la petite flèche vers le haut), pour les remercier pour leur temps. Aussi, si une réponse est assez bon pour vous, si vous allez pour quelque chose d'autre, vous pouvez marquer une réponse comme étant la "accepté" un.
InformationsquelleAutor | 2009-09-11