非常に簡単なシナリオです。 プロジェクトとデータ構造: は、私は2つのクラスを持っています。クラスプロジェクトは、データ構造 < メンバーのリストが含まれています>。 私の目標は、プロジェクトとそのすべてのデータ構造を1回の呼び出しで読み込むことです。NHibernate - 単純な結合クエリ
public class Project
{
public virtual string Id { get { } set { } }
public virtual string Name { get { } set { } }
public virtual ISet<DataStructure> DataStructures { get { } set { } }
}
public class DataStructure
{
public virtual string Id { get { } set { } }
public virtual string Name { get { } set { } }
public virtual string Description { get { } set { } }
public virtual Project Project { get { } set { } }
public virtual IList<DataField> Fields { get { } set { } }
}
注データ構造もクラスのDataFieldのリストが含まれていますが、私は今、これらの権利をロードしないこと。流暢NHibernateの中
マッピング:
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Table("PROJECTS");
Id(x => x.Pk, "PK");
Map(x => x.Id, "ID");
Map(x => x.Name, "NAME");
HasMany<DataStructure>(x => x.DataStructures).KeyColumn("FK_PROJECT");
}
}
public class DataStructureMap : ClassMap<DataStructure>
{
public DataStructureMap()
{
Table("DATA_STRUCTURES");
Map(x => x.Id, "ID");
Map(x => x.Name, "NAME");
Map(x => x.Description, "DESCRIPTION");
References<Project>(x => x.Project, "FK_PROJECT");
HasMany<DataField>(x => x.Fields).KeyColumn("FK_DATA_STRUCTURE");
}
}
これは私のクエリです:
using (ISession session = SessionFactory.OpenSession())
{
IQuery query = session.CreateQuery("from Project left join DataStructure");
project = query.List<Project>();
}
結果は、この例外です:
NHibernate.Hql.Ast.ANTLR.SemanticException: Path expected for join! [from Themis.DataEntities.Project left join DataStructure]
は私がのためにフィールドを指定する必要がありますか参加しますか?マッピングからは推測されていませんか?
注 - 特定のものを検索する必要がないので、表PROJECTS単一プロジェクト行を含んでいます。
注2 - 私はNHibernateのセットアップが正常にちょうどプロジェクトをロードすることによって、正しいことを確認しました。
良い答えを、私はあなたが私が担当していた場合、私はあなたのための修正でしょう 'Project.DataStructures'を意味すると思います。 – ChrisAnnODell
あなたは正しいです。 –
IQuery query = session.CreateQuery( "Project left join Project.DataStructures")にクエリを変更しました。今度は少し違うエラーが出ます:NHibernate.Hql.Ast.ANTLR.InvalidPathException:無効なパス: 'Project.DataStructures' [Themis.DataEntities.Projectから継承Project.DataStructures] – Yoav