Картография NHibernate не заполняет сумку - PullRequest
1 голос
/ 10 марта 2011
<class name="CashThreshold" table="CASH_THRESHOLD_COUNTERS" lazy="true" >
<id name="Id" column="ID" >
  <generator class="assigned" />
</id>
<bag name="ThresholdNominalsList" cascade="all" inverse="true" lazy="false" table="CASH_THRESHOLD_CAS_COUNTERS">
  <key column="CASH_THRESHOLD_ID" />
  <one-to-many class="NominalThreshold" />
</bag>

Карта второй таблицы

<class name="NominalThreshold" table="CASH_THRESHOLD_CAS_COUNTERS" lazy="true" >
<composite-id>
  <key-property name="CashTrasholdId" column="CASH_THRESHOLD_ID" type="long"></key-property>
  <key-property name="Nominal" column="NOMINAL" type="long"></key-property>
</composite-id>

<property name="MinNoteCount" column="MIN_NOTE_COUNT" />
<property name="MaxNoteCount" column="MAX_NOTE_COUNT" />

Классы таблиц

public class CashThreshold : ICashThreshold
{
    public virtual long Id { set; get; }

    /// !!!!!!! IS ALWAYS AMPTY, but not null !!!!!
    public virtual IList<INominalThreshold> ThresholdNominalsList { set; get; }
}

public class NominalThreshold : INominalThreshold
{
    public virtual long CashTrasholdId { set; get; }
    public virtual long Nominal { set; get; }
    public virtual long MinNoteCount { set; get; }
    public virtual long MaxNoteCount { set; get; }

    public override bool Equals(Object obj)
    {
        var tmp = (INominalThreshold)obj;
        return (tmp.CashTrasholdId == CashTrasholdId && tmp.Nominal == Nominal);
    }

    public override int GetHashCode()
    {
        return (int)CashTrasholdId ^ (int)Nominal;
    }
}

Функция для получения списка ICashThreshold

        ICriteria selectAll = currentSession.CreateCriteria<ICashThreshold>();

        IList<ICashThreshold> list = selectAll.List<ICashThreshold>();

Запрос выполнен без ошибок.Bag-запрос успешно выполнен в sql-клиенте и вернул 4 результата, но IList ThresholdNominalsList не имеет элементов.

Спасибо.

1 Ответ

0 голосов
/ 11 марта 2011

Проблема решена.NHibernate назначил сумку успешно, но список был пуст, потому что данные в БД не были зафиксированы.Я вставил тестовые данные в таблицу, но не зафиксировал их.Когда я выполняю запрос в sql-client, он выполняется успешно (потому что это делается в сеансе, куда вставлены строки таблицы), но в hibernate был другой сеанс.Вот почему NHibernate не мог видеть данные таблицы.

...