Hibernate 的 formula简单用法

Hibernate 3 之后,formula(公式,Excel 里常见的) 得到了更广泛的应用,不过这里还是简单记录一下它在 <property> 中的应用。

假如我们要映射这么一个类: public class User {     private int id;     private String name;     Private Set<Order> orders = new HashSet<Order>();

    //setter & getter ...... } User 与 Order 建立了一对多的关联,那么它在 hbm 映射文件的写法大概就是:

<property name="name" type="string" column="name">
 <set name="orders">   
    <key column="user_id"/>    
    <one-to-many/> 
</set> 
没错,这两个对象进行的关联,通过 user.getOrders() 可以取得与此用户关联的所有 order,user.getOrders().size() 得到订单数量。

不过有时候,我们并不关心 User 有哪些 Oder 对象,或者太多,或是待下次请求再具体查询。而是在查询 User 时只想要只道订单的数量,也是这样一个 User 对象:
public class User {    
 private int id;     
 private String name;    
 Private int orderNumber;      
 //setter & getter ......
}
显然,orderNumber 属性在数据库表中没有相应的字段对应,如果是在 SQL 中我们可以用 count(*) ... group by id 来关联查询,其实在 hbm 映射文件中还更简单,那就是要用到 formula 了,参考配置如下:

<property name="orderCount" type="int">     

<formula>
     (select count(s.id) from order s where s.user_id=id)
</formula> 
</property> 
formula 也可以作为 property 的属性的。注意有几点,这里的 (select count(s.id) from order s where s.user_id=id)

1. 这是一个 sql 和 hql 的混合体 2. 红色部分为 sql 的范畴,所以要对应于数据库的表或字段 3. 蓝色的 id 出自于 hql,即当前 User bean 的 id 属性 4. 不要忘记了两边的括号哦, 因为它会作为 select * from HERE 的子查询的。

让它出错,出错了看输出信息会是好事。也不定总要 select 开头,比如像 (concat(first_name, last_name)) 也是可以的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值