Domanda

Ho il seguente mapping, la proprietà multi-to-one "Message" ha un'associazione one-to-many corrispondente nella 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'associazione multi-to-one si rifiuta di caricare quando si utilizzano i criteri api (tutto quello che ottengo è NULL), ecco un esempio di una query:

            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;

Qualche idea?

È stato utile?

Soluzione

Ok, quindi dopo quasi un giorno di dispiacere ho la soluzione. NHibernate non assume automaticamente un'associazione bidirezionale tra due entità anche se si dispone di mapping tra entrambi . È necessario dichiarare in modo imperativo le associazioni nel codice prima di persistere. Così:

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

Anche inverso = " true " dovrebbe essere applicato a lato con il membro della raccolta:

<set name="Receipts" inverse="true" cascade="save-update">
<key column="MessageId"></key>
<one-to-many class="IMessageReceipt"/>
</set>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top