我有以下的箴言
<property name="Allocated" type="decimal" formula="(select sum(a.AllocationAmount) from Allocation a where a.TransactionId = TransactionId)" />
这会加载已分配给运作良好的发票的交易金额。
但是,大多数情况下我并不关心这个数额。有没有办法有条件地加载这个计算列?或者有没有办法将此计算列添加到HQL / Critera中,以便我可以将其作为我运行的某些特定查询的一部分?
答案 0 :(得分:4)
在NH 3.0中,您可以定义延迟属性,这些属性与听起来完全一样(参见http://ayende.com/Blog/archive/2010/01/27/nhibernate-new-feature-lazy-properties.aspx)
然而,这看起来更适合于查询或者可能是充当视图的伪实体。
答案 1 :(得分:2)
如果在属性映射上指定access="none"
,则可以将属性保留在对象模型之外,但仍然使用hql查询它。有关详细信息,请参阅this article。
此外,您可以将该逻辑分解为函数,使用自定义方言注册,然后使用条件api(通过Projections.SqlFunction
)查询/项目