考虑以下三个Hibernate实体:
public class Car {
@OneToMany(fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
private List<Wheel> wheels;
}
public class Wheel {
@OneToOne(fetch = FetchType.LAZY)
private Hubcap hubcap;
}
public class Hubcap {
}
考虑以下标准:
Criteria criteria = getSession().createCriteria(Car.class);
List<Car> cars = criteria.list();
for (Car car : cars) {
Hibernate.initialize(car.getWheels());
}
有没有办法控制将生成的子选择查询?具体来说,我想加入subselect,以便在获取轮子时也可以获取轮毂盖。这当然可以通过将FetchType更改为EAGER来实现,但我需要一些更特别的东西 - 在逐个查询的基础上。
由于代码目前我需要生成另一个选择来获取Hubcaps。
答案 0 :(得分:0)
是的,你可以使用标准来做,但我不记得它是如何完成的,只是在条件中寻找连接,但我建议使用HQL而不是Criteria更具可读性:
select c
from Car c join fetch c.wheels
where ...
答案 1 :(得分:0)
您可以使用setFetchMode方法更改条件查询中的获取类型。
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html
答案 2 :(得分:0)
经过大量研究后,似乎在现阶段这是不可能的,至少在没有扩展Hibernate的情况下。