Я нахожусь в процессе обновления до 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());