java - 如何在Hibernate中实现这个查询?

标签 java sql hibernate

我正在将旧版 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/

相关文章:

java - 在Java中实例化抽象类

mysql - 使用 bash 转义 SQL

sql - 选择满足两个条件的ID

java - 复合键类关系→错误: not mapped to a single property

java - 在JAVA中转换和比较两种日期格式

java - java中如何调整默认打开的图像自动获取计算机分辨率

java - 从软键盘捕获 "DONE"按键

c# - 可以通过查询结果获取结果集行数吗?

java - hibernate 搜索。如何从索引中排除实体?

java - 在独立 Java 应用程序中使用现有的 GORM 数据模型