Pregunta

Probablemente esto sea increíblemente simple, pero en este momento no puedo ver el bosque debido a los árboles.

Para ser breve, me gustaría modelar un objeto de palabra que tenga palabras relacionadas (sinónimos). Al hacerlo, podría tener las siguientes asignaciones:

<class name="Word" table="bs_word">
<id name="Id" column="WordId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>

<property name="Key" column="word" type="String" length="50" />
<many-to-one name="SynonymGroup" class="BS.Core.Domain.Synonym, BS.Core" column="SynonymId"  lazy="false"/>


<class name="Synonym" table="bs_Synonym">
<id name="Id" column="SynonymId" type="Int32" unsaved-value="-1">
  <generator class="native">
    <param name="sequence"></param>
  </generator>
</id>
<property name="Alias" column="Alias" type="String" length="50" />
<bag name="Words" cascade="none" lazy="false" inverse="true">
  <key column="SynonymId" />
  <one-to-many class="Word"  />
</bag>

Mapearlo de esta manera significaría que para una palabra determinada, puedo acceder a palabras relacionadas (sinónimos) como esta:

palabra.GrupoDeSinónimos.Palabras

Sin embargo, me gustaría saber si es posible asignar una bolsa de objetos en una instancia de un objeto de palabra... si eso tiene sentido, para poder acceder a las palabras relacionadas de esta manera:

palabra.palabras

Intenté jugar con el elemento del mapa y los elementos compuestos, todo fue en vano, así que me preguntaba si alguna persona amable podría indicarme la dirección correcta.

TA, KMOO01

¿Fue útil?

Solución

Esto sería asignar un palabra entidad con una colección de palabras (sinónimos):

<class name="Word">
  <id ...>
    <generator .../>
  </id>
  <set name="Synonyms" cascade="all">
    <key />
    <many-to-many class="Word" />
  </set>
</class>

Se puede personalizar los nombres de tabla en los elementos class y set, y los nombres de las columnas de los elementos y key many-to-many según sea necesario.

Tenga en cuenta que he utilizado en lugar de set bag, ya que se ajusta mejor a la semántica. Puede asignar a un ICollection<Word> o Iesi.Collections.Generic.ISet<Word>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top