Предложение CONNECT BY требуется в этом блоке запроса - PullRequest
0 голосов
/ 13 марта 2019

Я нахожусь в процессе обновления до Hibernate 5.3.4. Это вызвало сбой некоторых интеграционных тестов. У пары таблиц есть имена столбцов id. Это вызывает ошибку CONNECT BY clause required in this query block.

В рассматриваемых методах используются запросы Criteria. Эти запросы разбиты на реальные SQL-запросы, в которых все имена столбцов перечислены в SQL-запросе, как показано в примере ниже.

SELECT
    this_.id AS id1_70_0_,
    this_.ACCT_ID AS ACCT_ID2_70_0_,
    this_.PROD_ID AS PROD_ID3_70_0_,
    this_.in_type AS in_type4_70_0_,
    this_.set_typ AS set_typ5_70_0_
FROM
    SET_TYP this_
WHERE
    this_.acct_id IN (
    SELECT
        acct_id
    FROM
        account
    START WITH
        acct_id = 630
    CONNECT BY
        PRIOR parent_acct_id = acct_id )

Если я удаляю запрос Criteria и использую SQL-запрос ниже, он работает нормально.

SELECT
    *
FROM
    SET_TYP
WHERE
    acct_id IN (
    SELECT
        a.acct_id
    FROM
        account a
    START WITH
        a.acct_id = 750
    CONNECT BY
        PRIOR parent_acct_id = a.acct_id )

Как продолжить использование критериев запросов?

Критерий запроса выглядит следующим образом.

Criteria filter = getSession().createCriteria(SetTyp.class);
filter.add(Restrictions.sqlRestriction("acct_id in (select acct_id from account start with acct_id = ?0 connect by prior parent_acct_id = acct_id)", accountId, StandardBasicTypes.INTEGER));
Set<SettleTypeOverride> results = new TreeSet<>();
results.addAll(filter.list());    
...