我目前使用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。
答案 0 :(得分:6)
我不知道单独使用CriteriaBuilder的任何解决方案。有两种选择可行。这些表似乎是事件实体和TAG实体之间的多对多关系。
在Event实体中添加带有@Formula注释的两个字段。 @Formula注释允许您在其中使用一些sql语句,并且可以使用当前实体的参数。在公式中,您可以使用一些SQL专有方法
当然,如果在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