2009-09-02 249 views
0

我有一个父表和关系表来查找父子关系。 我需要找到孩子,父母和兄弟姐妹...Fluent NHibernate/NHibernate映射

EMPLOYEE_RELATION有保存关系的EMPLOYEE_ID和PARENT_ID列。

以下是SQL的样子。我如何将其映射到流利的NHibernate/NHibernate。

select 
    V1.PARENT_ID AS PARENT_ID, 
    V.EMPLOYEE_ID AS EMPLOYEE_ID, 
    V2.EMPLOYEE_ID AS SIBLINGS_ID 
FROM 
    EMPLOYEE V 
INNER JOIN EMPLOYEE_RELATION V1 
    ON V.EMPLOYEE_ID = V1.EMPLOYEE_ID 
INNER JOIN EMPLOYEE_RELATION V2 
    ON V2.PARENT_ID = V1.PARENT_ID 
WHERE V.EMPLOYEE_ID = 6357 
+0

有你有一个关系表的一个原因,而不必在雇员表父ID?只有没有父母的员工将该ID设置为0。这也会使寻找根源变得更容易。 – Zoidberg

+0

这些是现有的表格。无法修改它们 – bkhanal

回答

0

声明:我是一名java Hibernate用户;我没有使用NHibernate,但我认为它非常相似。

一些伪代码:假设你有两个实体对象,如:

public class EmployeeRelation { 
Employee Parent //parent property 
Employee Employee //child property 
} 

public class Employee { 
int EmployeeID 
... 
} 

你会想用一个多到一的关系对EmployeeRelation每个属性映射(许多EmployeeRelations可以指向同雇员)。 hibernate文档详细介绍了这种关系的配置信息。

然后你可以做(​​这是Java风格的代码,所以它可能是NH不同):

Criteria c = session.createCriteria(Employee.class); 
c.add(Restrictions.eq("EmployeeID", 6357)); 
Employee myEmployee = (Employee)c.uniqueResult(); 

然后,让兄弟姐妹(所有的关系,为这个父):

c = session.CreateCriteria(EmployeeRelation.class); 
c.add(Restrictions.eq("Parent", myEmployee)); 
List<EmployeeRelation> siblings = (List<EmployeeRelation>)c.uniqueResult(); 

这是我的头顶;您可能能够找到一种更优雅的方式,例如使用HQL在一个查询中完成所有操作。如果每个员工只能拥有一个父母,则还可以查看映射员工与其他员工对象和父员工参考的集合,而不是使用EmployeeRelation对象。

HTH!

2

,你应该能够使用许多一对多的方式与交叉表EMPLOYEE_RELATION创建图表。换句话说,在获取某个实体后,您应该能够将附加到它的所有子代作为与父代相同的对象的简单列表。你应该能够进一步遍历它,但我不完全确定。

下面是它如何看在你的映射文件:

​​
相关问题