使用 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;
}
所以我需要的是在单个查询中获取所有数据,根是 Bill
或 Entry
使用 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,等等.所以是的,它支持你想要的任何级别。
我有以下情况:
@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;
}
所以我需要的是在单个查询中获取所有数据,根是 Bill
或 Entry
使用 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,等等.所以是的,它支持你想要的任何级别。