我對sql一般不熟悉,所以使用Hibernate就像是在我確切地知道問題是什麼之前尋找答案。請隨時糾正我的錯誤。我在一個項目中,我必須使用Hibernate。我所做的大部分工作都非常基礎,我可以複製和修改。使用Hibernate做涉及兩個表的查詢
現在我想做一些不同的事情,我不知道配置和語法是如何結合在一起的。假設我有兩張桌子。
表A有兩個(相關)列,用戶GUID和管理器GUID。很明顯,管理者可以有多於一個用戶,因此對經理的查詢可以返回多行。此外,經理可以在多個項目上管理同一用戶,因此可以多次爲相同的經理查詢返回同一用戶。
表B有兩列,用戶GUID和用戶全名。一對一映射。
我想通過獨特的用戶從表A,組他們做經理GUID查詢GUID(所以相同的用戶是不會在結果中兩次),然後從表B.
返回這些用戶的全名我可以在沒有太多麻煩的情況下做到這一點,但我想使用Hibernate,所以我不必手動解析sql結果。這是使用Hibernate的要點之一,不是嗎?
現在我有一個Hibernate映射,它將表A中的每一列映射到一個DAO對象中的一個字段(以及get/set方法,我猜),我只是爲了保存表的數據而編寫的。
我也可以使用Hibernate DAO,我必須分別訪問每個表,並在單獨的步驟中執行上面提到的每個事情,但這樣做效率會更低(我假設)執行一個查詢。
我寫了一個服務對象來保存從查詢返回的數據(我的示例是簡化的 - 我將保留表A的一些其他數據並從表B獲取多個列)但我在如何編寫一個可以進行連接的DAO,或者使用DAO來完成連接。
僅供參考,這裏是我的Hibernate配置文件的樣本(簡化,以配合我的例子):
<hibernate-mapping package="com.my.dao">
<class name="TableA" table="table_a">
<id name="pkIndex" column="pk_index" />
<property name="userGuid" column="user_guid" />
<property name="managerGuid" column="manager_guid" />
</class>
</hibernate-mapping>
所以後來我有一個DAOImplementation的類,它查詢並返回列表像
public List<TableA> findByHQL(String hql, Map<String, String> params)
等我不知道如何「最佳做法」即是。
啊。然後在這個虛構的模型中,我會查看團隊成員的名單,得到他們的全名? 後續問題:在Hibernate中,我可以有多個到同一個表的映射嗎?換句話說,我可以保留當前獨立的映射,併爲我需要的對象創建一組替換的映射到一些相同的表中。 – 2010-02-09 16:28:17
@Nathan第一個問題:是的。第二個問題:是的,你可以有幾個實體(因此有多個映射)映射到一個表。 – 2010-02-09 16:40:01