用@Formula 标注的虚拟列可不可以只在需要的时候才进行投影?
chi0104
2012-07-20
问题描述:
用@Formula 标注的虚拟列可不可以只在需要的时候才进行投影? 例如在FundsAssign.class 中加入代码 //TODO Move formula SQL to getter methods. @Formula("(select (total_money - (select nvl(sum(t.money),0) from hm_funds_send_detail t where t.funds_assign_id=id and t.is_del is null)) from dual)") private Double wff; 目前,当查找FundsAssign的时候, wff 都会自动做成虚拟列加到查询的SQL中,但是目前项目中hm_funds_send_detail表的数据比较大,单独查询FundsAssign列表都要花费 10秒左右时间。简化后的SQL语句如下: select * from (select this_.id as id2_, this_.funds_name as name3_, (select (total_money - (select nvl(sum(t.money), 0) from hm_funds_send_detail t where t.funds_assign_id = id and t.is_del is null)) from dual) as formule14_ from hm_funds_assign this_) where rownum < 100 问题: 怎么样可以在使用 dc.createAlias("fundsAssign", "fundsAssign");这种级联查询的时候排除掉带有@Formula的虚拟列,只有真正调用的时候,比如在jsp页面上调用 ${fundsAssign.wff}才加上这些虚拟列的查询? Thanks! |
|
chi0104
2012-07-20
本来想在@Formula 上加一个@Transient 备注,发现加了@Transient 之后整个虚拟列不起作用了。
@Transient // 加上后所有的地方都显示 FundsAssign.wff not mapping. @Formula("(select (total_money - (select nvl(sum(t.money),0) from hm_funds_send_detail t where t.funds_assign_id=id and t.is_del is null)) from dual)") private Double wff; |