Hibernate CriteriaBuilder将多行连接成一个

时间:2016-07-04 09:48:39

标签: java sql hibernate concatenation

我目前使用CriteriaBuilder获得了hibernate的双重结果。

我有一个存储事件ID的表和一个连接表,它将多个具有ID的值存储到另一个表中。例如;

事件

ArrayList<Integer> exampleList = new ArrayList<>(200);

Integer[] exampleArray = new Integer[800];

exampleList.ensureCapacity(1000);

Collections.addAll(exampleList, exampleArray);

加入表格

ID ....
---------
1123
1124
1125

标签

ID  event_id  tag_id
----------------------
1  1124      2
2  1124      3
3  1123      6
4  1123      7

这显然会导致双重结果。例如。

ID tag
---------
1  Dance
2  Hiphop
...

在hibernate的CriteriaBuilder中是否可以获得这样的结果集;

eventID ... tag_id   tag
--------------------
1124        2      Hiphop
1124        3      Dance

我在SQL服务器本身看到了多个解决方案,但我找不到使用hibernate的CriteriaBuilder。

2 个答案:

答案 0 :(得分:6)

我不知道单独使用CriteriaBuilder的任何解决方案。有两种选择可行。这些表似乎是事件实体和TAG实体之间的多对多关系。

  1. 在Event实体中添加带有@Formula注释的两个字段。 @Formula注释允许您在其中使用一些sql语句,并且可以使用当前实体的参数。在公式中,您可以使用一些SQL专有方法

  2. 当然,如果在Event对象上有Tag对象的集合,则可以在Java中执行此操作。可能你已经考虑过了

答案 1 :(得分:0)

如果使用Oracle,则有LISTAGG函数。在这里与'::'连接:

e.g。

(SELECT LISTAGG(b.DESCRIPTION, '::') WITHIN GROUP ( ORDER BY b.id) FROM TABLE_T)

这将是一个Native SQL查询。

https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030