当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring JPA/Hibernate将SINGLE表查询的1列映射到COLLECTION

赵献
2023-03-14

我想知道是否有一种类似于流API groupingBy收集器的方法。我知道如何选择一列(这个问题被标记为重复的,我不相信它是重复的),我想做一个分组(比如java流API的groupingBy收集器),而不是分组依据。假设您有一张桌子(一张桌子),如下所示:

+---------------------+
+       myTable       +
+----------+----------+
+ column_A | column_B +
+----------+----------+
+        1 |        1 +
+        1 |        2 +
+        1 |        3 +
+        2 |        1 +
+----------+----------+

我想要一些

@Entity
@Table("MyTable")
public class MyEntity {
  @Column("column_A")
  private int a;
  
  @Column("column_B") ?
  private List<Integer> b; //normanly this wuould just be int b, butI want a list of all b's that have the same a
}

像回购一样

public interface MyCrudRepo extends CrudRepository<MyEntity,Integer>{
  List<MyEntity> findByA();
} 

public interface MyCrudRepo extends CrudRepository<MyEntity,Integer>{
  @Query("SELECT m.a,m.b FROM MyEntity m")
  List<MyEntity> customFind();
} 

这不一定是它应该如何看待结束,任何类似的工作都是好的。我已经研究了投影,但所有示例都使用了两个不同的表。

共有1个答案

曾新立
2023-03-14

没有一种特定的方法可以使用JPQL完成您需要的工作。相反,您可以使用Hibernate ResultTransex,它允许您将查询结果转换为您需要的任何内容。这是一个代码解决方案,类似于在列表结果中使用Stream API实现分组并返回包含聚合数据的映射。

 类似资料:
  • 问题内容: 映射双向列表时,我不了解Hibernate的行为。Hibernate生成的SQL语句对我来说并不是最佳的。有人可以启发我吗? 情况如下:我有一对多的父子关系。我将此关系与双向列表映射。 根据《Hibernate注释参考指南》(第7章:与索引集合的双向关联),映射应如下所示: 但是在这种情况下,Hibernate在保留一个孩子的父母时会产生三个SQL语句: 第三条语句似乎是多余的,因为并

  • 问题内容: 如何在Hibernate中映射整数列表? 像这样: 问题答案: 使用@ElementCollection映射。参阅文件

  • 我对是新手,这就是我要做的。基本上,目标是将数据从Excel加载到SQL Server。有两个列表,一个是键,另一个是值。如何调用这两个列表来运行批处理SQL语句? 这是我到目前为止所拥有的: > < li> 通过这样做,似乎Groovy会将整个列表视为一个大字符串。我可以将列表输出为字符串,并删除单引号,但这似乎并不酷。我们能参数化列表中的字段吗? 对于k列表,我是否需要对所有字段使用单引号,如

  • 问题内容: 有人可以向我展示如何在Hibernate中编写以下SQL并正确获取结果的示例吗? 如果可能的话,我想做的就是将结果放入自己的基类中: 我相信在JPA(使用)中是可能的,但是我还没有弄清楚如何在Hibernate(使用和)中做到这一点。 我试图更好地学习Hibernate,即使这个“简单”查询也令人困惑,无法知道Hibernate以哪种形式返回结果,以及如何将结果映射到我自己的(基)类中

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例