我正在使用JPA和Hibernate 3.6。我试图从批处理中获取数据库的结果,减少了休眠中的选择数量。在我的A类中,有一个B类对象的列表。我已经指定了fetchMode,只有一个Select用于获取B的所有对象。
public class A {
@OneToMany(mappedBy="objectA", cascade=CascadeType.ALL)
@Fetch(FetchMode.SUBSELECT)
List<B> listB = new ArrayList<B>();
}
public class C {
int varC;
}
我希望批量返回所有实例C,一个select语句来获取所有实例。我使用以下TypedQuery获取C对象列表。怎么做到呢 ?谢谢你的帮助。
List<C> listC = em.createQuery("FROM C", C.class).getResultList();
为了更清楚,我有以下C类。
public class C {
int varC;
}
我想获取C的所有对象,“从tableC中选择*”。但是当我使用typedQuery时,它会触发n个select查询来获取C的n个对象。我怎样才能确保它通过一个select语句获取所有元素。我刚刚给出了A类的示例,而B类在其他场景中展示了我能够通过一个select语句获取B的所有元素。
答案 0 :(得分:1)
您可以使用JPQL提取语法:
List<A> listA = em.createQuery("select distinct a from A a join fetch a.listB",
A.class).getResultList();
这将导致一个带有join语句的SQL填充listB关系。
需要使用distinct关键字,否则您将获得A
的副本答案 1 :(得分:0)
A和C之间没有关系,C是只有1个属性且没有连接的表。如果你想从A获得C,你必须将其与A一起加入并在A中提供类似List<B> listB
变量的内容,以便在类A中变为List<C> listC
或C sinlgeC