Java hibernate:父项的子ID检索列表

Java hibernate:父项的子ID检索列表,java,hibernate,collections,annotations,one-to-many,Java,Hibernate,Collections,Annotations,One To Many,技术:Hibernate3.0 假设我有实体类公司 @Entity @Table(name="tbl_companies") public class Company { @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.IDENTITY) int id; @Co

技术:Hibernate3.0

假设我有实体类公司

    @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;       
    }
@实体
@表(name=“tbl_公司”)
公营公司
{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
int-id;
@列(name=“name”)
字符串公司名称;
@OneToMany(mappedBy=“公司”)
雇主名单;
@OneToMany(mappedBy=“公司”)
项目清单;
@OneToMany(mappedBy=“公司”)
部门名单;
@OneToMany(mappedBy=“公司”)
列表分支列表;
}
在通过hibernate注释映射到数据库的实体公司中,包含与之相关的其他实体的列表。由于这些实体的对象,如分支机构、项目、员工本身都是重对象,它将使公司对象非常重,并且包含几乎全部的数据库数据。避免这种情况的一种方法是使用延迟加载。另一种方法是使用List branchIdList,List ProjectionList,它是对象的ID列表。我的问题是,哪种方法是标准做法,在这种情况下使用更好。更好的使用包括一些因素,如内存方面的性能,程序员的灵活性(第一个是程序员的灵活性,第二个使用更少的内存)。另一个问题是,如果我使用第二种方法,注释中会发生什么变化。我怀疑hibernate是支持ID列表还是只支持成熟的对象

谢谢

另一种方法是使用列表 列表,列表投影列表 是对象的ID列表


在做这件事之前,请仔细考虑。使用ORM的全部意义在于,数据库中通过外键相互链接的行可以表示为通过常规java引用和集合链接的对象。通过使用您概述的方案,您将失去使用Hibernate的大部分优势

推荐的方法是使用延迟加载

更好地使用包括以下因素 主要表现在记忆方面,, 程序员的灵活性(第一个) 是一个灵活的程序员和 第二个使用更少的内存)

嗯,你获得的内存,如果有的话,不值得程序员为此付出痛苦

另一种方法是使用列表 列表,列表投影列表 是对象的ID列表


在做这件事之前,请仔细考虑。使用ORM的全部意义在于,数据库中通过外键相互链接的行可以表示为通过常规java引用和集合链接的对象。通过使用您概述的方案,您将失去使用Hibernate的大部分优势

推荐的方法是使用延迟加载

更好地使用包括以下因素 主要表现在记忆方面,, 程序员的灵活性(第一个) 是一个灵活的程序员和 第二个使用更少的内存)

嗯,你获得的内存,如果有的话,不值得程序员为此付出痛苦

我想,你必须先看看你的 检索公司的用例 对象意味着,例如,有 太多的情况下,员工 使用公司对象检索。那里 项目不受影响的情况较少 使用公司对象检索。所以 按照这些步骤,您可以删除 公司对象中的项目列表和 从项目中实现多对一 对象(手动检索)。所以 分析你所有的场景,并做出决定 有些关系是多对一的。制造其他 列出懒惰的人

我想,你必须先看看你的 检索公司的用例 对象意味着,例如,有 太多的情况下,员工 使用公司对象检索。那里 项目不受影响的情况较少 使用公司对象检索。所以 按照这些步骤,您可以删除 公司对象中的项目列表和 从项目中实现多对一 对象(手动检索)。所以 分析你所有的场景,并做出决定 有些关系是多对一的。制造其他 列出懒惰的人


“使用ORM的全部意义在于,数据库中通过外键相互链接的行可以表示为通过常规java引用和集合链接的对象。”这就是我认为的,这就是为什么我不愿意使用第二种方法的原因。但是,如果有人想要实现第二种方法,那么注释中应该做什么更改呢?如果可能的话,也请回答这个问题。“使用ORM的全部意义在于,数据库中通过外键相互链接的行可以表示为通过常规java引用和集合链接的对象。”这就是我认为的,这就是为什么我不愿意使用第二种方法的原因。但是,如果有人想要实现第二种方法,那么注释中应该做什么更改呢?如果可能的话,也请回答这个问题。谢谢你的回答。以上公司课程就是一个例子。我肯定会避免列出不需要的对象。若有人想使用第二种方法,那个么注释代码应该是什么呢?谢谢你们的回答。上面的公司类就是一个例子。我肯定会避免列出不需要的对象。如果有人想使用第二种方法,那么注释代码应该是什么?