Question

Veuillez excuser mon ignorance sur le sujet, car je suis relativement nouveau dans Hibernate / NHibernate, mais j’ai rencontré une cartographie que je ne parviens pas à comprendre:

Voici à quoi ressemble ma table de base de données:

<bincontents> 
  <id>5873715</id> 
  <title>Video Title</title> 
  <sortorder>0</sortorder> 
  <itemid>23079</itemid> 
  <itemtype>VIDEO</itemtype> 
</bincontents> 
<bincontents> 
  <id>5873716</id> 
  <title>Clip Title</title> 
  <sortorder>1</sortorder> 
  <itemid>131854</itemid> 
  <itemtype>CLIP</itemtype> 
</bincontents>

Y a-t-il un moyen de mapper un tête-à-tête avec une clause where?

Ainsi, un objet BinContent peut avoir un ItemType VIDEO ou CLIP. Ce sont des chaînes, et je ne peux malheureusement pas changer cela.

Par conséquent, si le champ Type d'élément indique "VIDÉO", j'aimerais disposer d'un "Plusieurs". "Vidéo". objet, Toutefois, si le champ ItemType indique "CLIP", j'aimerais avoir un clip plusieurs-à-un.

Aide!

Je ne suis même pas sûr de vouloir utiliser un plusieurs-en-un dans ce cas. Peut-être un one-to-one?

Était-ce utile?

La solution

Il me semble que vous avez un candidat à l'héritage. Si vous avez un type de base abstrait BinContents, disposez d'une classe dérivée de VideoBinContents, qui contient uniquement un mappage vidéo, et d'un ClipBinContents, qui contient uniquement un mappage Clip. Votre type d'élément est votre discriminateur. Jetez un œil ici pour en savoir plus: http://www.hibernate.org /hib_docs/reference/en/html/inheritance.html

Autres conseils

Ne pourriez-vous pas avoir les objets Vidéo et Clip dans votre classe et vous assurer simplement qu'ils ne sont jamais renseignés en même temps? Vous aurez peut-être besoin d'informations supplémentaires, telles que la structure actuelle de votre classe. De même, n'y aura-t-il qu'une seule vidéo par objet Bin et vice versa?

C’est peut-être plus compliqué que ce que vous recherchez, mais il semble que vous pourriez peut-être configurer une classe de base pour vos bacs et créer des sous-classes de Vidéo ou Clip. En utilisant la hiérarchie d'héritage table par classe, vous pouvez utiliser votre structure de table existante.

Cela vous permettrait de fournir différents mappages pour chaque sous-classe.

Vous pouvez jeter un oeil à n'importe quelle cartographie. Avec le mappage "n’importe lequel", vous pouvez définir une association polymorphe.

Vérifiez ceci (paragraphe 5.2.4)

Quoi qu'il en soit, je ne connais pas bien votre "domaine", mais je pense que Jim a également raison. Peut-être devriez-vous revoir votre modèle de données et votre modèle de domaine (si possible) et voir si un type d'héritage n'est pas approprié ici.

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