Мой вопрос похож на этот вопрос. Но я хочу запросить по дискриминатору дочерней сущности, связанной с отношением один к одному, и не зная точного значения дискриминатора, т. е. по типу, а не по строке.
Учитывая 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, а не его значение дискриминатора.