我有以下情况:
@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是Bill
或Entry
使用JPA 2.0标准(后面是Hibernate)。我已经阅读了一些关于此问题HERE和HERE的帖子,似乎我无法在结果中使用子查询或获取两个级别的数据。
Entry
时,我无法获取Period
,当我以root身份使用Bill
时,我无法获取所有内容Entry
中的其他表格。此外,我不能使用eager fetch,因为还有其他用例需要这些表。
还有其他方法吗?
谢谢!
答案 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等等。所以是的,它的支持你想要多少级别。