0
我的問題是類似this question。 但我想用一到一對一的關係相關的子實體的鑑別查詢,並且不知道確切的鑑別值,即按類型不是字符串。NHibernate的:查詢通過鑑別上的關聯
鑑於像HBM:
<class name="Parent" table="ParentTable">
<id name="Id">
<generator class="guid.comb" />
</id>
<one-to-one name="Child" class="IChild" property-ref="Parent" cascade="all" />
</class>
<class name="IChild" table="ChildTable" abstract="true">
<id name="Id">
<generator class="foreign">
<param name="property">Parent</param>
</generator>
</id>
<discriminator column="TypeKey" type="String"/>
<one-to-one name="Parent" class="Parent" />
</class>
<subclass name="ConcreteChild" extends="IChild" discriminator-value="Concrete1">
<property name="SomeProperty"/>
</subclass>
或其他任何一個對一個的配置,我想運行一個類似的查詢:
public IEnumerable<Parent> FindByChild(Type childType)
{
return session.CreateCriteria<Parent>()
.Add(Restrictions.Eq("Child.class", childType))
.List<Parent>();
}
更多信息:
上述標準的查詢,因爲「Child.class」不被識別爲有效的失敗。
使用HQL類似的查詢失敗,因爲NHibernate的使用childType的全名,而不是在查詢其鑑別價值。
巧妙的兒童實體名稱!我無法理解爲什麼這會解決問題,但它確實!爲我節省了多少時間,謝謝! – joniba
我很高興它幫助。只是爲了更多地討論答案和其他可能有類似的情況,我認爲,每次你需要添加相關實體的集合的情況下,你應該建立一個別名來引用它。至少我是這麼做的...... –