使用 JPA 标准从 3 个表返回结果

Returning result from 3 tables using JPA criteria

我有以下情况:

@Entity
public class Period
{
    String Name;
}

@Entity
public class Bill
{
    Period period;

    @OneToMany(mappedBy = "bill", fetch = FetchType.LAZY)
    private List<Entry> entry = new ArrayList<Entry>(0);
}

@Entity
public class Entry
{
    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "BILL_ID", nullable = false)
    Bill bill;

    String text;

    BigDecimal amount;
}

所以我需要的是在单个查询中获取所有数据,根是 BillEntry 使用 JPA 2.0 标准(后面是 Hibernate)。我读过几篇关于这个问题的文章HERE and HERE,似乎我不能在结果中使用子查询或获取两层深的数据。

编辑:为了让我的问题更清楚:当我使用 Entry 作为 root 时,我无法获取 Period 而当我使用 Bill 作为 root 时,我无法获取获取 Entry 中的所有其他表。我也不能使用 eager fetch,因为还有其他用例需要这些表。

还有其他方法吗?

谢谢!

要从关联中获取数据,您可以使用 left join fetch clauses:

select distinct b from Bill b 
left join fetch b.period 
left join fetch b.entry
where b...

select distinct e from Entry e 
left join fetch e.bill b 
left join fetch b.period
where e...

关于 Criteria,它的 fetch() 方法 returns 一个 Fetch,它本身有一个方法 fetch() 返回一个 Fetch(),它本身有一个方法 fetch() 返回一个 Fetch,等等.所以是的,它支持你想要的任何级别。