代码之家  ›  专栏  ›  技术社区  ›  mirzak

休眠初始化实体组/集合

  •  1
  • mirzak  · 技术社区  · 6 年前

    我有一个在页面中获取实体的查询。每页包含100个实体。对于这100个实体,我需要获取一些延迟获取的嵌套实体。

    所发生的是,我对主实体执行了1个SELECT,然后对嵌套实体执行了100个SELECT。

    public class MyMainEntity {
        private NestedEntity nested;
    
        @Override
        @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL,  orphanRemoval = true)
        @JoinColumn(foreignKey = @ForeignKey(name = "exFK_Nest_Enth"))
        public NestedEntity getNested() {
            ...
        }
    

    有什么方法可以解决这个问题吗 Hibernate.initialize()

    2 回复  |  直到 6 年前
        1
  •  0
  •   Pavan    6 年前

    您可以使用Hibernate条件查询来获取mymaintentity并使用条件.createAlias(“嵌套”,“ns”,条件。子选择). 它将触发两个查询;一个用于获取mymaintentity,另一个用于嵌套mymaintentity查询作为子查询。如果你使用条件。加入然后它将只触发一个查询并获取MyMainActivity和Nested

        2
  •  0
  •   DaviM    6 年前

    默认情况下,休眠它所遵循的最新版本 :

    ToMany: Lazy
    ToOne: Eager
    

    但是,如果您使用的是旧版本的Hibernate,那么所有关系都默认使用 Lazy

    在这种情况下,当您要尝试检索子关系时,请使用 JOIN FETCH ,例如:

    Select m from MyMainEntity m JOIN FETCH m.nested;