Большое спасибо, Стефан, наконец-то я смог решить эту проблему.
Я попытаюсь эмулировать проблему, используя другой пример. Надеюсь, этот может пригодиться кому-то еще.
Проблема: скажем, у меня есть две таблицы Employee и Project, в таблице проекта есть два столбца «Lead» и «Manager», в которых будет храниться код «Employee». Мне нужно было получить детали проекта на основе кода «Manager» и «Lead».
Вот решение моей проблемы.
Файл сопоставления сотрудников.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Learn.Models" assembly="Learn.Models">
<class name="Employee" table="Employee">
<id column="Id" type="Int64">
<generator class="identity"></generator>
</id>
<property name="EntityId" column="EmployeeEntityId" not-null="true"></property>
<property name="FirstName" column="FirstName" not-null="true"></property>
<property name="LastName" column="LastName" not-null="true"></property>
<property name="DateOfBirth" column="DateOfBirth" not-null="true"></property>
<property name="EmpCode" column="EmpCode" not-null="true"></property>
</class>
</hibernate-mapping>
Файл сопоставления проекта :
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Learn.Models" assembly="Learn.Models">
<class name="Project" table="Project">
<id column="Id" type="Int64">
<generator class="identity"></generator>
</id>
<property name="EntityId" column="ProjectEntityId" not-null="true"></property>
<property name="ProjectName" column="ProjName" not-null="true"></property>
<many-to-one name="ProjectManager" class="Employee" property-ref="EmpCode" column="Manager" lazy="proxy"></many-to-one>
<many-to-one name="ProjectLead" class="Employee" property-ref="EmpCode" column="Lead" lazy="proxy"></many-to-one>
</class>
</hibernate-mapping>
Класс сотрудника :
public class Employee : IEntity
{
public Employee()
{
}
public virtual long Id { get; set; }
public virtual Guid EntityId { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual DateTime DateOfBirth { get; set; }
public virtual string EmpCode { get; set; }
}
Класс проекта :
public class Project:IEntity
{
public virtual string ProjectName { get; set; }
public virtual Employee ProjectLead { get; set; }
public virtual Employee ProjectManager { get; set; }
public virtual long Id { get; set; }
public virtual Guid EntityId { get; set; }
}
Мне нужно было получить детали проекта на основена код сотрудника ProjectLead и ProjectManager, и это HQL-запрос, который я использовал.
string hql = "select p from Project p "
+ "join p.ProjectLead as lead "
+ "join p.ProjectManager as manager "
+ "where p.ProjectLead.EmpCode = 006 and "
+ "p.ProjectManager.EmpCode = 005";