2

我正在使用 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 也可以批量返回,一个选择语句来获取所有实例。我正在使用以下 TypedQuery 来获取 C 对象的列表。怎么做到呢 ?谢谢您的帮助。

List<C> listC = em.createQuery("FROM C", C.class).getResultList();

为了更清楚,我有以下 C 类。

public class C {
        int varC;
    }

我想获取 C 的所有对象,“Select * from tableC”。但是当我使用 typedQuery 时,它会触发 n 个选择查询以获取 C 的 n 个对象。我如何确保它通过一个 select 语句获取所有元素。我只是举了一个 A 类和 B 类的例子来展示在其他场景中我可以通过一个 select 语句获取 B 的所有元素。

4

2 回答 2

1

您可以使用 JPQL 获取语法:

List<A> listA = em.createQuery("select distinct a from A a join fetch a.listB",
                  A.class).getResultList();

这将产生一个带有连接语句的 SQL 来填充您的 listB 关系。

distinct 关键字是必需的,否则您将获得 A 的重复项

于 2013-07-19T01:11:24.303 回答
0

A和C之间没有关系,C是一个只有1个属性并且没有连接的表。如果你想从 A 中获得 C,你必须将它与 A 连接起来,并在 A 中给出类似于你的List<B> listB变量的东西。所以它变成了你的List<C> listCC sinlgeCA 中的东西

于 2013-07-21T23:50:45.517 回答