Hibernate键映射问题

时间:2009-07-01 23:36:43

标签: c# nhibernate

我正在使用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类也没有。我的SubTable类确实具有Type Owner属性。

在数据库中,一切似乎都是正确的。但是,当我尝试使用此语句检索某些与某个Owner-Id匹配的子表行时

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

我得到了这个例外:

  

“无法解析属性:Owner_id:SubTable”

所以我猜hibernate希望SubTable类也有一个Owner_id属性。没有这样做有没有办法做到这一点?我的SubTable类执行一个属性,该属性包含对Owner对象本身的引用。应该不够吗?或者,在没有太多搞乱模型的情况下,在hibernate中选择这种连接的最佳方法是什么?

我想要实现的是所有者的SpecificNumber用作SubTable中的引用。我想查询具有特定所有者的行的SubTable。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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