2010-12-15 79 views
0

技術:Hibernate的3.0休眠:子ID檢索列表父

假設我有實體類公司

@Entity 
    @Table(name="tbl_companies") 
    public class Company 
    { 
      @Id 
      @Column(name="id") 
      @GeneratedValue(strategy=GenerationType.IDENTITY) 
      int id; 

      @Column(name="name") 
      String companyName; 

      @OneToMany(mappedBy = "company") 
      List<Employees> empList; 

      @OneToMany(mappedBy = "company") 
      List<Projects> projectList; 

      @OneToMany(mappedBy = "company") 
      List<Department> deptList; 

      @OneToMany(mappedBy = "company") 
      List<Branch>  branchList;  
    } 

在實體公司,是由Hibernate註釋映射到數據庫中包含的其他實體的名單與之相關。由於這些實體的對象如分支,項目,員工本身都是沉重的對象,因此它會使公司對象非常沉重並且包含幾乎全部的數據庫數據。避免這種情況的一種方法是使用延遲加載。另一種方法可以是使用List branchIdList,List projectIdList是對象的ID列表。我的問題是哪種方法是標準做法,更適合在這種情況下使用。更好地使用包括像內存方面的性能,主要是程序員的靈活性(第一個是程序員靈活,第二個使用更少的內存)。另一個問題是,如果我使用第二種方法,註釋中會有什麼變化。我懷疑hibernate是否支持id列表或只支持完整的對象。

感謝

其他

回答

2

一種方法可以是使用列表 branchIdList,列表projectIdList即 是IDS的對象列表。

在做這件事之前請仔細考慮。使用ORM的要點是,DB中通過外鍵相互鏈接的行可以表示爲通過常規Java引用和集合鏈接的對象。通過使用您所概述的方案,您將喪失使用Hibernate的大多數優點。

推薦的方法是使用延遲加載。

最好使用包括像在存儲器術語 性能因素主要是 靈活性編程器(第一個 是一個柔性的,程序員和 第二個使用較少的存儲器)。

恕我直言,你獲得的內存,如果有的話,是不值得它造成的程序員的痛苦。

+0

「使用ORM的全部意義在於,DB中通過外鍵互相鏈接的行可以表示爲通過常規Java引用和集合鏈接的對象。」這就是我認爲這就是爲什麼我不願意使用第二種方法。但是,如果有人想實施第二種方法,註釋中應該改變什麼? – 2010-12-15 05:17:16

+0

http:// stackoverflow。com/questions/4415260/hibernate-ternary-association-mapping如果可能,請回答這個問題。 – 2010-12-15 05:18:08

1

我認爲,您必須首先看到您的 用例檢索公司 對象。意思是,例如, 僱員的 與公司對象檢索太多的情況。其中 是較少的情況,其中項目是 與公司對象檢索。所以, 以下這些,你可以刪除公司對象 項目列表和 使它從項目 對象(手動檢索它)多對一。因此, 分析您的所有情況,並使 多對一的關係。使其他 列表懶惰。

+0

謝謝answer.Above公司的課程是例如。當然,我會避免不需要的對象列表。如果有人想用第二種方法去做什麼,應該註釋代碼是什麼? – 2010-12-15 07:55:34