2010-12-15 76 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