我有一段类似于以下的代码:
public void doQuery(final Baz baz){
final Query query = getSessionFactory().getCurrentSession().createQuery(
"select distinct foo from Foo as foo "+
"join foo.a as a"+
"join foo.b as b "+
"join b.c as c "+
"where baz=:baz"
);
query.setParameter("baz", baz);
final List<Foo> list = query.list();
for (final Foo foo : list) {
final Set<C> cSet = foo.getB().getCs();
final String value = foo.getSomeValue();
for (final C c : cSet) {
final Long key = c.getSomeLong();
// Do stuff with key and value
}
}
}
每次执行 for 循环时,它都会在后台运行额外的休眠查询以提取额外的数据(因为对象被标记为延迟加载)。不需要将这些对象切换到 eager,因为使用 POJO 的其他类不需要该数据。
显然,上面的代码会造成瓶颈,这是我想避免的。是否有一种特定于休眠的方式(即没有本机 SQL)来修改查询以一次性只带回必要的数据?
我可以让查询返回一个 String[][],其中 col1 作为键,col2 作为值,而不是返回 Foo
更新:
我将查询更改为只返回必要的键/值
“从...中选择不同的 c.id、foo.someValue