NHibernate:通过鉴别器查询关联
我的问题类似于。 但是我想通过与一对一关系关联的子实体的鉴别器进行查询,而不知道准确的鉴别器值,即,按类型而不是按字符串 给定一个hbm,如:NHibernate:通过鉴别器查询关联,nhibernate,nhibernate-criteria,Nhibernate,Nhibernate Criteria,我的问题类似于。 但是我想通过与一对一关系关联的子实体的鉴别器进行查询,而不知道准确的鉴别器值,即,按类型而不是按字符串 给定一个hbm,如: <class name="Parent" table="ParentTable"> <id name="Id"> <generator class="guid.comb" /> </id> <one-to-one name="Child" class="IChi
<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>();
}
public IEnumerable FindByChild(类型childType)
{
返回会话。CreateCriteria()
.Add(Restrictions.Eq(“Child.class”,childType))
.List();
}
进一步资料:
- 上述条件查询失败,因为“Child.class”未被识别为有效
- 使用HQL的类似查询失败,因为NHibernate在查询中使用childType的全名,而不是其鉴别器值
return session.CreateCriteria<Parent>()
.CreateAlias("ParentChild","Child")
.Add(Restrictions.Eq("ParentChild.class", childType))
.List<Parent>();
返回会话。CreateCriteria()
.CreateAlias(“父母子女”、“子女”)
.Add(Restrictions.Eq(“ParentChild.class”,childType))
.List();
其中ParentChild只是我用来引用父类的子实体的名称您尝试过使用别名吗?我现在无法在我的机器上测试它,但应该类似于此
return session.CreateCriteria<Parent>()
.CreateAlias("ParentChild","Child")
.Add(Restrictions.Eq("ParentChild.class", childType))
.List<Parent>();
返回会话。CreateCriteria()
.CreateAlias(“父母子女”、“子女”)
.Add(Restrictions.Eq(“ParentChild.class”,childType))
.List();
其中ParentChild只是我用来指父类的子实体的名称Ingenious!我不明白为什么这能解决问题,但它确实解决了!谁知道救了我多少小时,谢谢!我很高兴这有帮助。为了更详细地说明答案以及其他可能有类似情况的人,我认为每次需要添加与实体集合相关的条件时,都应该创建一个别名来引用它。至少我是这样做的…很有创意!我不明白为什么这能解决问题,但它确实解决了!谁知道救了我多少小时,谢谢!我很高兴这有帮助。为了更详细地说明答案以及其他可能有类似情况的人,我认为每次需要添加与实体集合相关的条件时,都应该创建一个别名来引用它。至少我是这样做的。。。