【问题标题】:hibernate: list of child ids retrieval for parenthibernate:父级的子ID检索列表
【发布时间】:2011-05-25 16:10:29
【问题描述】:

技术:休眠 3.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;       
    }

在通过休眠注释映射到数据库的实体公司中,包含与其相关的其他实体的列表。由于 Branch、Project、Employee 等这些 Entities 的对象本身是重对象,因此会使 Company 对象非常重,并且包含几乎全部的 db 数据。避免这种情况的一种方法是使用延迟加载。另一种方法是使用 List branchIdList,List projectIdList 是对象的 id 列表。我的问题是哪种方法是标准做法,在这种情况下更适合使用。更好的使用主要包括内存方面的性能等因素,程序员的灵活性(第一个是程序员的灵活性,第二个使用更少的内存)。另一个问题是,如果我使用第二种方法,注释会发生什么变化。我怀疑 hibernate 是否支持 id 列表或仅支持完整的对象。

谢谢

【问题讨论】:

    标签: java hibernate collections annotations one-to-many


    【解决方案1】:

    另一种方法是使用 List branchIdList, List projectIdList 那 是对象的 id 列表。

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

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

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

    恕我直言,你获得的内存,如果有的话,不值得程序员痛苦。

    【讨论】:

    • “使用 ORM 的全部意义在于,DB 中通过外键相互链接的行可以表示为通过常规 J​​ava 引用和集合链接的对象。”这就是我认为这就是为什么我不愿意使用第二种方法的原因。但是,如果有人想实现第二种方法,注释应该有什么变化?
    • stackoverflow.com/questions/4415260/… 如果可能,也请回答这个问题。
    【解决方案2】:

    我认为,你必须先看到你的 检索公司的用例 目的。意味着例如,有 员工所在的场景太多 使用公司对象检索。那里 项目是较少的场景 使用公司对象检索。所以, 按照这些,您可以删除 来自公司对象的项目列表和 从 Project 中实现多对一 对象(手动检索)。所以, 分析你所有的场景并做出 一些关系是多对一的。制作其他 列出懒惰。

    【讨论】:

    • 感谢您的回答。例如上面的公司类。我绝对会避免列出不需要的对象。如果有人想采用第二种方法,注释代码应该是什么?
    猜你喜欢
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2014-05-14
    • 2020-05-20
    • 2018-06-25
    相关资源
    最近更新 更多