2009-12-15 43 views
0

在我看來,當您在Hibernate/JPA中使用關係時,使用像OneToMany這樣的關係可以提高讀取性能,因爲只需要運行一個數據庫調用即可獲得一個父實體和所有子實體。由於我的應用程序的性質,我想避免使用關係並將外鍵列映射爲常規列。在沒有關係的情況下使用Hibernate/JPA並避免多個數據庫調用

一個問題是,當我真正要處理的關係,我需要做這樣的代碼......

ParentEntity pe => someDao.findBySomething("some param"); //db round trip List<ChildEntity 
childEntities = someDao.findChildren(pe); //db round trip 

好像有某種方式來做事一大更手動像我希望在避免額外的往返旅程。有任何想法嗎?

回答

1

如果您想避免關係,那麼您將失去JPA的顯着優勢。然而,你仍然可以用Hibernate支持的Native SQL來做你想要的。

+0

,我可以寫明白繼承和輸出優化的SQL一個以上的數據庫是非常有用的查詢這一事實。我發現只有在你始終想要從DB加載整個對象圖的時候才使用關係纔是合理的。更不用說使用Hibernate這樣的像Warp-Persist這樣偉大的庫,通過移除樣板代碼使我的生活變得更加輕鬆。 – benstpierre 2009-12-15 20:40:59

+0

應該指出的是,非關係實體更適合JAX-RS RESTful Web服務,因爲您通常希望返回實體父ID而不是父母本身,並且您不一定要通過寫入更多數據來複制數據模型轉移對象。 – 2014-05-15 00:25:43

1

你也可以免費使用@NamedQueries和HQL/JPA-QL來代替你的映射。寫起來會更容易。例如:

childEntities = someDao.findByQuery("Child.findChildrenOfParent", parentId); 

哪裏Parent.findChildren

SELECT c FROM Child c WHERE c.parentId=:parentId 
相關問題