我正在将旧版 iBatis 实现转换为 Hibernate,出于向后兼容性的目的,需要显示对象集合的计数而不是集合本身。原始查询是:
select A.*, ( select count(*) from B where B.A_id = A.id ) as B_count from A;
和 b_count 将在响应中显示。我希望能够执行相同的操作,而无需为每个查询结果延迟加载 A 的 B 集合。
有什么想法或建议吗?
最佳答案
最好的方法似乎是使用 Hibernate 公式,映射到 A 类中我的 BCount 属性的 getter 和 setter。我的代码:
public class A {
// ...
private long bCount;
// ...
@Formula( "(select count(*) from B where B.A_id = id" )
public long getBCount() {
return this.bCount;
}
public void setBCount( long bCount ) {
this.bCount = bCount;
}
}
此方法的优点在于,在同一次提取中返回计数以水合初始对象,并且不会导致集合查询结果的 1+N 次查询!
关于java - 如何在Hibernate中实现这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1094671/