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...