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

时间:2015-06-24 04:42:58

标签: java hibernate jpa-2.0 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;
}

所以我需要的是获取单个查询中的所有数据,其中root是BillEntry使用JPA 2.0标准(后面是Hibernate)。我已经阅读了一些关于此问题HEREHERE的帖子,似乎我无法在结果中使用子查询或获取两个级别的数据。

编辑:为了让我的问题更加明确:当我以root身份使用Entry时,我无法获取Period,当我以root身份使用Bill时,我无法获取所有内容Entry中的其他表格。此外,我不能使用eager fetch,因为还有其他用例需要这些表。

还有其他方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

要从关联中获取数据,请使用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()方法返回一个Fetch,它本身有一个方法fetch()返回一个Fetch(),它本身有一个方法fetch()返回一个Fetch等等。所以是的,它的支持你想要多少级别。