Pergunta

Eu tenho o mapeamento a seguir, a 'Mensagem' de muitos para um para uma associação correspondente de um para muitos na 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>

A associação muitos para um se recusa a carregar ao usar a API de critérios (tudo o que recebo é nulo), aqui está um exemplo de uma consulta:

            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;

Alguma ideia?

Foi útil?

Solução

Ok, depois de quase um dia de desgosto, tenho a solução. Nibernate não assume automaticamente uma associação bidirecional entre duas entidades mesmo se você tiver mapeamentos entre os dois. Você precisa declarar imperativamente as associações em seu código antes de persistir. Desta forma:

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

Também inverso = "true" deve ser aplicado ao lado do membro da coleção:

<set name="Receipts" inverse="true" cascade="save-update">
<key column="MessageId"></key>
<one-to-many class="IMessageReceipt"/>
</set>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top