用@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;  
Global site tag (gtag.js) - Google Analytics