Question

J'ai le mappage suivant, la propriété plusieurs-à-un 'Message' a une association un à plusieurs correspondante dans la classe 'RootMessage'.

<class name="IMessageReceipt" lazy="false" table="MessageReceipts" abstract="true">

        <id name="Id">
            <generator class="guid.comb"></generator>
        </id>

        <discriminator column="Discriminator"/>
        <property name="Address" />
        <property name="Status" />
        <property name="MarkedAsDeleted" />

        <many-to-one name="Message" column="MessageId" class="RootMessage" 
                not-found="ignore"/>

        <subclass name="MessageReceipt" lazy="false" discriminator-value="1">
        </subclass>

    </class>

L'association many-to-one refuse de charger lors de l'utilisation de l'API de critères (tout ce que j'obtiens est NULL), voici un exemple de requête:

            List<IMessageReceipt> list;
        using (var tx = Session.BeginTransaction())
        {
            var criteria = Session.CreateCriteria(typeof (IMessageReceipt));
            criteria.Add(Restrictions.Eq("Address", address));
            criteria.Add(Restrictions.Eq("Status", status));
            criteria.SetFirstResult(0);
            criteria.SetMaxResults(quantity);
            list = criteria.List<IMessageReceipt>().ToList();
            tx.Commit();
        }
        return list;

Des idées?

Était-ce utile?

La solution

Ok, donc après presque une journée de chagrin, j’ai la solution. NHibernate n'assume pas automatiquement une association bidirectionnelle entre deux entités même si vous avez des correspondances entre les deux . Vous devez impérativement déclarer les associations dans votre code avant de persister. Ainsi:

message.Receipts = receipts;
foreach (var receipt in receipts)
{
   receipt.Message = message;
}
Session.Save(message);
tx.Commit();

Aussi inverse = " vrai " doit être appliqué sur le côté avec le membre de la collection:

<set name="Receipts" inverse="true" cascade="save-update">
<key column="MessageId"></key>
<one-to-many class="IMessageReceipt"/>
</set>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top