Hibernate 中 formula的简单应用

在一个项目的某一个查询场景中,TEACHER表是主表,STUDENT表是TEACHER的子表,二者是以一对多的方式关联。业务逻辑须要查询多条TEACHER表的数据,而且在查询出每条A表数据的同时还须要将对应STUDENT表的行数取出来。咱们固然能够利用Hibernate先将每条TEACHER数据load进来之后再以TEACHER.getStudents().size()这种方式取得对应的行数,可是代码会显得很繁琐而且增长了许多须要执行的SQL语句,有没有什么替代的方法呢? java

 

咱们可使用Hiberante的formula。 spa

 

为了解决前面提到的问题,咱们只须要在TEACHER 的orm配置文件里加上这样一个property,定义其formula属性以下: code

  1. ...  
    <property name="rowCount" formula="(select count(*) from STUDENT a where a.ID=teacherId)"   
    type="java.lang.String" />  
    ...
     

 

 经过这种方式咱们就能够在取得每个TEACHER持久化对象的时候就方便的获得了须要的统计信息,能够大幅度的提升咱们的开发效率。注意这里不仅仅能够用来统计记数,还能够用于sum,avg等其余统计。 orm

 

在Hibernate 3.x以前,formula属性只可以出如今property元素中。如今仍然能够这样作,可是Hibernate 3.x提供了一个formula属性或元素(二者在formula的用法方面实质上是等效的),能够在许多元素中使用,包括discriminator、 many-to-one、one-to-one、element、many-to-many、map-key、map-key-many-to-many 和property。这样就大大提升了对象关系映射的灵活性,从而支持对复杂数据 模型的更为细粒度的解释。 xml

 

从3.x开始,Hibernate 使用formula、filter、subselect等提升映射灵活性,提供细粒度的解释特性,从而将其推动到一个新的级别。 对象

相关文章
相关标签/搜索