【问题标题】:Hibernate CriteriaBuilder concatenate multiple rows into oneHibernate CriteriaBuilder 将多行连接成一个
【发布时间】:2016-11-06 00:05:00
【问题描述】:

我目前使用 CriteriaBuilder 使用休眠获得双重结果。

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

事件

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
...

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

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

是否有可能在 hibernate 的 CriteriaBuilder 中得到这样的结果集;

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

我在 SQL Server 本身中看到了多种解决方案,但我找不到使用 hibernate 的 CriteriaBuilder 的解决方案。

【问题讨论】:

    标签: java sql hibernate concatenation


    【解决方案1】:

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

    例如

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

    这将是一个原生 SQL 查询。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 2011-06-24
        • 1970-01-01
        • 2023-01-15
        • 1970-01-01
        相关资源
        最近更新 更多