我想用Hibernate从表中检索大约1亿行。我有一个持久实体项目,其中包含一个费用集合(另一个持久实体)。鉴于我将遍历结果和访问费用为每个对象,我想急切地收取费用,以避免n + 1问题。用ScrollableResults抓取Hibernate中的集合
我还应该提及,我想将它加入另一个名为Provider(一对一映射但不包含外键)的表中。我尝试过:
String query = "select new " + Order.class.getName()
+ "(i, p) from Item i left join fetch i.fees f, Provider p where "
+ "p.factoryId=i.factoryId and p.factoryRef=i.factoryRef";
return session.createQuery(query).scroll();
我的订单类包含提供者字段和项目字段。我得到这个错误:
Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
我想与订单包含项目(使用费预先抓取)和供应商的可滚动列表,结束了。
我认为这个答案是正确的。如果是这样,你应该可以让Hibernate知道你实际上通过改变查询返回一个List而不是构造一个Order来获取'Item':'select i,p from ...'。您将不得不手动创建'订单'。 – 2012-08-11 10:30:21