2009-10-08 5 views
1

J'ai 3 tables DB: Person, Address et PersonAddress. L'adresse de la personne est une table de jointure simple (ne stocke que les ID de la personne et de l'adresse).Hibernate mise en œuvre de simples relations plusieurs-à-plusieurs - Dictionnaire ou liste?

Dans mon modèle de domaine, j'ai Personne et Adresse. La personne est configurée pour avoir une relation plusieurs-à-plusieurs avec Address (via PersonAddress). Dans le code, ceci est implémenté avec List<Address>.

On m'a dit que je vais obtenir de meilleures performances de NHibernate si je ...

  1. Créer un objet de domaine PersonAddress
  2. Configurer personne d'avoir un-à-plusieurs à PersonAddress
  3. Configurer aa beaucoup à plusieurs index Adresse de cette relation
  4. Mettre en œuvre dans le code avec un Dictionary<Address, PersonAddress>

Est-ce vrai?

Répondre

2

Je ne créerais pas une classe inutile dans le domaine juste à cause de cela. L'utilisation d'un dictionnaire pour de meilleures performances me semble également étrange.

Vous pouvez utiliser un idbag, cela est plus rapide à mettre à jour. (Ceci est mappé comme une liste dans le domaine, mais a un ID dans la base de données).

Il y a toujours différentes choses à considérer au sujet des performances. Il y a un chapitre très intéressant dans la documentation de référence about collection performance.

1

je aussi ne présenterait une cartographie complexe pour les sakés de performance dans NHibernate jusqu'à ce que la nécessité de le faire est mis en place.

Avec le mappage plusieurs-à-plusieurs standard, vous pouvez utiliser la stratégie un-à-plusieurs avec l'objet PersonAddress (PersonAddress a une collection de personnes et une collection d'adresses). Cette stratégie est utilisée lorsque vous souhaitez conserver des informations supplémentaires sur la relation Personne-Adresse.