急切地加载一个懒惰的子集合 [英] Eager loading a lazy child collection
本文介绍了急切地加载一个懒惰的子集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有类似于此的数据模型
class Office
{
@ManyToOne
@JoinColumn(name =cafeteria_id)
自助餐厅自助餐厅;
}
class Cafeteria
{
@OneToMany(mappedBy =cafeteria)
@LazyCollection(value = LazyCollectionOption.EXTRA)
列表与LT椅子>椅子;
}
类椅子
{
@ManyToOne
@JoinColumn(name =cafeteria_id)
自助餐厅自助餐厅;
}
我有这样的JPQL查询
从办公室o选择o o.cafeteria.someThing =?
上面的查询可以正常工作,但在一种情况下,我希望能够加载所有椅子的查询o.cafeteria.chairs)。我应该如何修改查询以热切地获取所有椅子?使用 fetch
使用解决方案>属性在
OneToMany
注释中。您可以根据需要多次映射相同的关系:
class Cafeteria {
@OneToMany(mappedBy =食堂)
@LazyCollection(value = LazyCollectionOption.EXTRA)
List< Chair>椅子;
@OneToMany(fetch = FetchType.EAGER,mappedBy =cafeteria)
List< Chair> eagerlyLoadedChairs;
}
然后您可以使用它们中的任何一个:
//延迟加载
从Office中选择o内部加入o.cafeteria c内部加入c.chairs ch其中c.someThing =?
// Eager加载
从Office中选择o内部加入o.cafeteria c内部加入c.eagerlyLoadedChairsch其中c.someThing =?
I have data model similar to this
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;
}
I have a JPQL query like this
select o from Office o where o.cafeteria.someThing = ?
Above query works fine but in one case I would like a query which could eagerly load all the chairs(o.cafeteria.chairs) as well. How should I modify query to eagerly fetch all chairs?
解决方案
Use fetch
attribute in OneToMany
annotation. You can map the same relationship as many times as you want:
class Cafeteria {
@OneToMany(mappedBy="cafeteria")
@LazyCollection(value=LazyCollectionOption.EXTRA)
List<Chair> chairs;
@OneToMany(fetch = FetchType.EAGER, mappedBy="cafeteria")
List<Chair> eagerlyLoadedChairs;
}
And then you can use any of them:
// 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 = ?
这篇关于急切地加载一个懒惰的子集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文