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

Java 使用JPA标准从3个表返回结果,java,hibernate,jpa-2.0,criteria,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

我有以下情况:

@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;
}
因此,我需要的是在一个查询中获取所有数据,根是账单,条目使用JPA2.0标准,后面是Hibernate。我读过一些关于这个问题的文章,似乎我不能在结果中使用子查询,也不能从两个层次获取数据

编辑:让我的问题更清楚:当我使用Entry作为root时,我不能获取句点,当我使用Bill作为root时,我不能获取Entry中的所有其他表。另外,我不能使用eagerfetch,因为还有其他用例需要这些表

还有其他方法吗


谢谢

要从关联中获取数据,请使用:


关于条件,它的方法返回一个Fetch,它本身有一个Fetch返回一个Fetch,它本身有一个Fetch返回一个Fetch的方法,等等。因此,是的,它支持您想要的任意级别。

如果您还可以发布HQL或SQL以了解您试图完成的任务,它会有所帮助。如果您将Fetch type更改为eager,它会获取它,根据您的HQLI对这些表有不同的用例,我不能在这里使用earger。但是当我的根是条目时,我如何从Bill中提取周期?请阅读整个问题。我还需要类型安全的JPA标准。请自己试试。条件也有fetch。您只需要翻译上面的查询。我在上面指出的一点是,JPA似乎没有能力获取任何超过一个级别的内容,在您的示例e.b.period中,period属性是second lvl.JPA不是hibernate,您的示例不是criteria,而是HQL。
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...