NHibernate 3.2 で、第 2 レベルのキャッシュ (SysCache) を使用しています。コレクションを削除し、同じトランザクションで新しい要素を書き込んでいます。ただし、削除された要素への参照がまだ保持されているため、これによりキャッシュが壊れます。取引コード:
RepositorioMovimentacao.Delete(notaHibernate.MovimentacaoItemEquipList);
RepositorioNota.Update(notaHibernate);
RepositorioMovimentacao.Save(model.MovimentacaoItemEquipList);
Session.Commit()
別のセッションでエンティティを取得するときにスローされる例外:
No row with the given identifier ...
これが私のマッピングです:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="CMD.Business.BusinessEntity" namespace="CMD.Business.BusinessEntity.Entities">
<class name="NotaMovimentacaoEquipamento" table="CEM.NOTA_MOVIMENTACAO_EQUIPAMENTO" lazy="true" dynamic-update="true" dynamic-insert="true" >
<cache usage="read-write"/>
...
<bag name="MovimentacaoItemEquipList" inverse="true" generic="true" lazy="true" >
<cache usage="read-write"/>
<key>
<column name="NTMO_SQ_NOTA_MOVIMENTACAO"/>
</key>
<one-to-many class="MovimentacaoItemEquip" />
</bag>
...
多対一のマッピング:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="CMD.Business.BusinessEntity" namespace="CMD.Business.BusinessEntity.Entities">
<class name="MovimentacaoItemEquip" table="CEM.MOVIMENTACAO_ITEM_EQUIP" lazy="true" dynamic-update="true" dynamic-insert="true" >
<cache usage="read-write"/>
...
<many-to-one name="NotaMovimentacaoEquipamento" class="NotaMovimentacaoEquipamento">
<column name="NTMO_SQ_NOTA_MOVIMENTACAO" />
</many-to-one>
...
ありがとう!