我正在使用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。
谢谢!
答案 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));