1

次のSQLクエリをNHibernateのICriteriaに変換しようとしています。

SELECT DISTINCT m.typeId, t.typeName
FROM Models m, Types t
WHERE m.qualifier=? AND m.typeId IS NOT NULL AND m.typeId = t.typeId

これらは両方ともNHibernateでModelsおよびModelTypeと呼ばれるクラスにマップされます。ICriteria.Listは、ModelTypeタイプのリストを返す必要があります。

ありがとう

4

1 に答える 1

1

良いニュースと悪いニュースがあります。ModelTypeのリストを返す基準を作成できます。ただし、セッション管理は行われません。その理由は、個別のクエリはプロジェクションのみを返すことができ、プロジェクションは常に管理されていないためです。

以下のクエリは、2つのエンティティ間の内部結合を実行し、これら2つの列に基づいて個別のセットを返すため、上記と同様のクエリを生成します。結果のトランスフォーマーは、プロパティを介して設定できるタイプを生成するように設定する必要があります。おそらくModelTypeのリストを返すことができますが、それらがセッションによって管理されないことを知っているだけです。

Session.CreateCriteria<Model>()
   .CreateAlias("Type", "t")
   .Add(Restrictions.Eq("Qualifier", myQualifier)
   .SetProjection(Projections.Distinct(
       Projections.ProjectionList()
          .Add(Projections.Alias(Projections.Property("t.Id"), "Id"))
          .Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName"))))
   .SetResultTransformer(Transformers.AliasToBean<ModelType>())
于 2011-03-28T15:05:51.820 に答える