После перехода на Hibernate6 исключение «LazyTableGroup не может быть преобразовано в класс PluralTableGroup».JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 После перехода на Hibernate6 исключение «LazyTableGroup не может быть преобразовано в класс PluralTableGroup».

Сообщение Anonymous »

Я переношу проект с Spring Boot 2.7.18 на Spring Boot 3, и это также приводит к обновлению Hibernate с Hibernate 5.6 на Hibernate 6.1.7.
У меня был довольно сложный запрос критериев. После миграции выполнение этого запроса приводит к следующему исключению:
класс org.hibernate.sql.ast.tree.from.LazyTableGroup не может быть приведен к классу org.hibernate.sql.ast.tree.from.PluralTableGroup (org.hibernate.sql.ast.tree.from.LazyTableGroup и
org.hibernate.sql.ast.tree.from.PluralTableGroup находится в безымянном модуле загрузчика «app»)

Код: Выделить всё

Caused by: java.lang.ClassCastException:  class org.hibernate.sql.ast.tree.from.LazyTableGroup cannot be cast to class org.hibernate.sql.ast.tree.from.PluralTableGroup (org.hibernate.sql.ast.tree.from.LazyTableGroup and org.hibernate.sql.ast.tree.from.PluralTableGroup are in unnamed module of loader 'app')
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.findActualTableGroup(BaseSqmToSqlAstConverter.java:2810)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeExplicitJoins(BaseSqmToSqlAstConverter.java:2763)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeAttributeJoin(BaseSqmToSqlAstConverter.java:2941)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeExplicitJoin(BaseSqmToSqlAstConverter.java:2775)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.lambda$consumeExplicitJoins$42(BaseSqmToSqlAstConverter.java:2759)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.hibernate.query.sqm.tree.domain.AbstractSqmFrom.visitSqmJoins(AbstractSqmFrom.java:260)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeExplicitJoins(BaseSqmToSqlAstConverter.java:2755)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeAttributeJoin(BaseSqmToSqlAstConverter.java:2941)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeExplicitJoin(BaseSqmToSqlAstConverter.java:2775)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.lambda$consumeExplicitJoins$42(BaseSqmToSqlAstConverter.java:2759)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.hibernate.query.sqm.tree.domain.AbstractSqmFrom.visitSqmJoins(AbstractSqmFrom.java:260)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeExplicitJoins(BaseSqmToSqlAstConverter.java:2755)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeJoins(BaseSqmToSqlAstConverter.java:2649)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.consumeFromClauseRoot(BaseSqmToSqlAstConverter.java:2624)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.hibernate.query.sqm.tree.from.SqmFromClause.visitRoots(SqmFromClause.java:80)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitFromClause(BaseSqmToSqlAstConverter.java:2365)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:1817)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:416)
at org.hibernate.query.sqm.tree.select.SqmQuerySpec.accept(SqmQuerySpec.java:122)
at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQueryPart(BaseSemanticQueryWalker.java:213)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQueryPart(BaseSqmToSqlAstConverter.java:1679)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:1477)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:416)
at org.hibernate.query.sqm.tree.select.SqmSelectStatement.accept(SqmSelectStatement.java:213)
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.translate(BaseSqmToSqlAstConverter.java:711)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.buildCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:380)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:300)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:276)
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:571)
at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:363)
at org.hibernate.query.sqm.internal.QuerySqmImpl.list(QuerySqmImpl.java:1073)
at org.hibernate.query.Query.getResultList(Query.java:94)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:405)
at jdk.proxy2/jdk.proxy2.$Proxy315.getResultList(Unknown Source)
...
Для миграции я использовал openrewrite и ручные исправления. Я также прочитал руководство по обновлению Hibernate 6 ( https://github.com/hibernate/hibernate- ... guide.adoc ).
Кроме того, я вставил в код тривиальный запрос критериев (выберите все из таблицы) непосредственно перед частью выдачи исключений и обнаружил, что это работает без проблем.
Погуглил для «PluralTableGroup» или «LazyTableGroup» мне тоже не помогло.
Я был бы очень признателен за любую помощь или подсказку по этому поводу!

Подробнее здесь: https://stackoverflow.com/questions/797 ... pluraltabl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»