Hibernate @Formula рекурсивный запрос с таблицей соответствия - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть таблица с отношением ManyToMany к себе.Итак, в моей базе данных H2 есть две таблицы:

supporting_asset:           supporting_asset_dependencies:
id | provided_csc           dependencies_id | supporting_assets_id 
------------------          ---------------------------------------
1  |  A1                           1        |          2
2  |  A3                           1        |          3
3  |  A2 

У меня есть вычисляемый атрибут minCSC, и для его вычисления я использую аннотацию @Formula:

@Formula(value="(Select min(sa.provided_csc) from supporting_asset_dependencies sad right join supporting_asset sa on sa.id = sad.dependencies_id where sad.supporting_assets_id = id group by id)")

Это работаетхорошо, но зависимые активы могут иметь собственные зависимости.С этим я получаю многоуровневое дерево зависимостей.Моя цель - получить минимальное значение csc из этого дерева.

Я пытался:

WITH RECURSIVE tree(id, provided_csc, dep_id) 
AS (SELECT sa.id, sa.provided_csc, sad.supporting_assets_id 
        FROM supporting_asset_dependencies AS sad 
            JOIN supporting_asset AS sa 
                ON sa.id=sad.dependencies_id 
        WHERE sad.supporting_assets_id=2 
    UNION ALL 
    SELECT child.id, child.provided_csc, childd.supporting_assets_id 
        FROM supporting_asset_dependencies AS childd 
            JOIN supporting_asset AS child 
                ON child.id=childd.dependencies_id 
    JOIN tree ON childd.supporting_assets_id=tree.id ) 
SELECT min(provided_csc) 
FROM tree

, но я получаю «Синтаксическая ошибка в выражении SQL».Кажется, что формула вычисляется в:

(SUPPORTING2_.WITH[*] TREE(SUPPORTING2_.ID, SUPPORTING2_.PROVIDED_CSC, SUPPORTING2_.DEP_ID) AS ( ..
.. ) SELECT MIN(SUPPORTING2_.PROVIDED_CSC) FROM TREE) AS FORMULA0_1_,

Похоже, она не знает команду 'with recursive' и пытается найти ее как поле таблицы.

Как сделатьМне нужно изменить запрос, чтобы он работал, или есть другой способ добиться того, чего я хочу?

--- ОБНОВЛЕНИЕ --- Я немного изменил запрос и на DB Fiddle это работает для БД SQLite.Это также работает в веб-консоли h2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...