如果我有这样的映射:
<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查询?
答案 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')是否包含点?也许发布一些你已经尝试过的代码?