1

子オブジェクトの日付フィールドに基づいて親オブジェクトのリストをロードする関連付けを作成しようとしています。日付が特定の日付以上の親オブジェクトのみが必要です。

問題は、今日の日付または前日のいずれかを使用すると、正しい子が返されることです。しかし、2010 年 11 月 2 日など、さらに遡った日付を使用すると、2010 年 11 月 2 日より前の日付を持つ子が含まれます。

コードは次のとおりです。

public IList<Parent> GetByDate(string parentId, DateTime date) {
  IList<Parent> list = null;
  using (ISession session = SessionFactory.OpenSession()) {
    list = session.CreateCriteria(typeof(Parent))
                      .Add(Expression.Eq("parent_id", parentId))
                      .CreateCriteria("children")
                        .Add(Expression.Gt("end_date", date)).List<Parent>();
  }
  return list;
} 

親のマッピング:

<id name="id">
  <generator class="native"/>
</id>

<property name="parent_id" />

<bag name="children" lazy="false">
  <key column="parent_id" />
  <one-to-many class="Child" />
</bag>

前もって感謝します!

4

1 に答える 1

1

基準に制限を追加しても、読み込まれる子には影響せ、親のみに影響します (これは、既にparentId; use を持っているため、あなたの場合には意味がありませんISession.Get)

子コレクションをフィルタリングする必要がある場合は、 を使用しますISession.CreateFilter

例:

var parent = session.Get<Parent>(parentId);
var children = session.CreateFilter(parent.children, "where end_date > :date")
                      .SetParameter("date", date)
                      .List<Children>();

これは、フィルタリングしているプロパティが end_date と呼ばれ、.Net 命名規則に従っていないことを前提としていますが、あなたが書いたものです。

于 2010-12-05T01:14:03.733 に答える