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等提升映射靈活性,提供細粒度的解釋特性,從而將其推動到一個新的級別。 對象

相關文章
相關標籤/搜索