HQL:查询动态组件属性

时间:2010-01-04 12:10:37

标签: nhibernate hibernate hql

如果我有这样的映射:

<class name="Library" table="Libraries">
  ...
  <dynamic-component name="Annotations">
    <property name="LibraryResolver.AlgorithmVersion" column="`LibraryResolver.AlgorithmVersion`" type="Int32" />
  </dynamic-component>
</class>

如何为LibraryResolver.AlgorithmVersion大于给定值的所有库编写HQL或Linq-to-NHibernate查询?

2 个答案:

答案 0 :(得分:2)

下面的HQL查询可能与您要查找的行相同

from Library as lib
where lib.Annotations.LibraryResolver.AlgorithmVersion > 2

如果你正在使用nhibernate,你试过NHibernate LambdaExtensions吗?这个库在Criteria和DetachedCriteria apis上提供了一组扩展方法,当使用上面的两个api查询时,它不需要魔术字符串。

下面是一个如何使用NHibernate Detached Criteria查询与上述LambdaExtensions库的示例

Answer answerAlias = null;
var actual = DetachedCriteria.For<Survey>()
.Add<Survey>( s => s.Status == SurveyStatus.Complete )
.Add<Questionnaire>( q => q.Id == questionnaireId )
.CreateAlias<Survey>( s => s.Answers, () => answerAlias )
.SetProjection( LambdaProjection.Property( () => answerAlias.Id ) );

答案 1 :(得分:1)

我不知道这是否有帮助但是当我使用Criteria API(在Java中)它只是工作。虽然没有尝试过HQL。

<dynamic-component name="values">
        <property name="dynamicNameValue" column="ATTRIBUTE_1" type="string"/>
        <property name="dynamicNumber" column="ATTRIBUTE_4" type="integer"/>
</dynamic-component>

Criteria criteria = session.createCriteria(DynamicAttributes.class)
                .add(Expression.eq("values.dynamicNumber", 2));

只是一些想法:问题是您传递的名称('LibraryResolver.AlgorithmVersion')是否包含点?也许发布一些你已经尝试过的代码?