妳計算貢獻值完全可以放在壹個表中通過1對多或者HQL來過濾。
如果非要分表做,那就遠離hbm,通過session.createSQLQuery()調用本地sql語句對數據庫直接進行操作。
=================
理解錯了,抱歉。這個可以結合妳的數據庫來看了。 我對pgsql比較熟, pgsql支持子表, 可以建立壹個父表,然後每個月建立壹個子表,查詢的時候直接查詢父表, pgsql會根據查詢條件裏的時間範圍自動決定是在所有子表中查還是在特定子表中查。select * from 父表是可以檢索到所有值的,這個機制在物理上又實現了數據水平切分和可管理性。
所以如果支持父-子表機制的數據庫裏,可以通過數據庫本身的特性來實現,hbm不需要改變,映射到父表即可。insert時候會自動寫入子表。如果子表不存在則寫入父表。
如果在不支持父-子機制的數據庫裏,查詢通過createSQLQuery來做,Hibernate支持將未映射的查詢結果Transform為特定的類型的對象。例如:
query.setResultTransformer(Transformers.aliasToBean(MyObject.class));
query.list();
insert通過時間字段計算出要寫入的數據表,通過insert來執行寫入。
總之,我給出的意見就是,支持子表特性的數據庫HBM來實現,不支持子表特性或者想脫離數據庫依賴那就用SQL來實現。