Java 正在加载惰性子集合

Java 正在加载惰性子集合,java,hibernate,jpql,Java,Hibernate,Jpql,我有类似的数据模型 class Office { @ManyToOne @JoinColumn(name = "cafeteria_id") Cafeteria cafeteria; } class Cafeteria { @OneToMany(mappedBy="cafeteria") @LazyCollection(value=LazyCollectionOption.EXTRA) List<Chair> chairs; } class C

我有类似的数据模型

class Office
{
   @ManyToOne
   @JoinColumn(name = "cafeteria_id")
   Cafeteria cafeteria;
}

class Cafeteria
{
   @OneToMany(mappedBy="cafeteria")
   @LazyCollection(value=LazyCollectionOption.EXTRA)
   List<Chair> chairs;
}

class Chair
{
    @ManyToOne
    @JoinColumn(name = "cafeteria_id")
    Cafeteria cafeteria;
}

上面的查询很好,但有一个例子,我想要一个能够急切地加载所有椅子(o.caffeeta.chairs)的查询。我应该如何修改查询以急切地获取所有椅子?

OneToMany
注释中使用
fetch
属性。可以根据需要多次映射同一关系:

class Cafeteria {
   @OneToMany(mappedBy="cafeteria")
   @LazyCollection(value=LazyCollectionOption.EXTRA)
   List<Chair> chairs;

   @OneToMany(fetch = FetchType.EAGER, mappedBy="cafeteria")
   List<Chair> eagerlyLoadedChairs;
}

您有两个选项,可以将提取类型从
惰性
更改为
急切
,但每次从自助餐厅加载对象时,这将始终加载您的
椅子列表

像这样:

@OneToMany(mappedBy="cafeteria", fetch=FetchType.EAGER)
@LazyCollection(value=LazyCollectionOption.FALSE)
List<Chair> chairs;
// Lazy loading
select o from Office o inner join o.cafeteria c inner join c.chairs ch where c.someThing = ?

// Eager loading
select o from Office o inner join o.cafeteria c inner join c.eagerlyLoadedChairsch where c.someThing = ?
@OneToMany(mappedBy="cafeteria", fetch=FetchType.EAGER)
@LazyCollection(value=LazyCollectionOption.FALSE)
List<Chair> chairs;
Hibernate.initialize(cafeteria.getChairs());