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());