2009-07-01 160 views
0

我正在使用NHibernate。我有两个表: 所有者 具有休眠键映射问题

<id name="SpecificNumber" column="SpecificNumber" type="int"> 
    <generator class="assigned"/> 
</id> 
<set name="SubTable" table="SubTable"> 
    <key column="Owner_id"/> 
    <one-to-many class="SubTable"/> 
</set> 

和一张桌子 子表

具有

<many-to-one name="Owner" class="Owner" column="Owner_id"/> 

现在我的C#类业主没有Owner_id属性,我的子表类也没有一个。尽管我的SubTable类具有类型所有者的属性。

在数据库中,一切似乎都是正确的。然而,当我尝试使用下面的语句检索符合特定所有者-ID,其中某些子表,行

ICriteria criteria = session.CreateCriteria<SubTable>(); 
criteria.Add(Expression.Eq("Owner_id",3)); 

我得到这个异常:

“无法解析属性:Owner_id的:子表”

所以我想冬眠会让SubTable类也有Owner_id属性。有没有办法做到这一点,而不这样做?我的SubTable类有一个属性,它拥有一个对所有者对象本身的引用。这应该不够吗?或者,在休眠时选择这种连接的最佳方式是什么,而不会太多地混淆模型?

我想要实现的是,所有者的SpecificNumber被用作SubTable中的引用。我想查询具有某个所有者的行的子表。

谢谢!

回答

2

在您的条件查询中,您不应该引用数据库中的列(因为我可以看到,Owner_id是表中的列),但您应该在对象上使用属性。 ICriteria API和HQL查询适用于您的对象(及其属性),因此,您不应该引用db-columns。

ICriteria crit = session.CreateCriteria <SubTable>(); 
crit.AddAlias ("Owner", "o"); 
crit.Add (Expression.Eq("o.SpecificNumber", 23)); 
+0

谢谢兄弟!你帮了我很多。 – noisecoder 2009-07-02 00:22:22