Performance question with Blaze Persistence (subqueries)

Hi!

I am in the process of refactoring some raw SQL/JDBC code with Blaze-Persistence. During code review, it was revealed that some JOIN statements from raw SQL were replaced by JOIN + subquery SQL generated by Blaze-Persistence at a couple of places. And tests showed that it has negative impact on performance. Is it possible to reformulate the Blaze Persistence queries in order to avoid those SQL subqueries as output ? I suspect this is actually a broader JPA related question, but maybe I am wrong.

Here, the JPA provider is Hibernate 6 (i think 6.29 or 6.31).

An example:

CriteriaBuilder<Long> cb = cbf.create(em, Long.class)
        .from(Document.class, "d")
        .select("d.id")
        .distinct()
        .innerJoin("typeUnit", "tu")
        .innerJoin("TREAT(tu.unit AS DocumentUnitPO)", "u");

Of course, DocumentUnitPO extends Unit class (discriminator inheritance) that’s why there is this TREAT. And this second innerJoin is translated into a JOIN + (select * from p_unit t where t.p_doc_type=1) etc. while in original, raw, SQL there is no need for the subquery, the JOIN is done directly with p_unit table. Could the BP request be rewritten to avoid this subquery and have just JOIN statements ?

Thanks!

This is actually something that Hibernate ORM does behind the scenes. Can you share some more details? The actual SQL query that is generated as well as what you think it should look like. Also, please attach the query execution plans of both queries and share what database version you’re using.

Hi. I found a way to avoid the subquery:

CriteriaBuilder<Long> cb = cbf.create(em, Long.class)
        .from(DocPO.class, "d")
        .select("d.id")
        .distinct()
        .innerJoin("typeUnit", "tu")
        .innerJoinOn("tu.unit", "u")
        .on("u.unitSubtype").eqLiteral(UnitSubtype.DOCUMENT.getDiscriminatorIntValue())
        .end();

...
cb.where("TREAT(u AS DocUnitPO).accessArchivedDocRestricted").eqLiteral(true);
...

This will not generate a SQL subquery but a JOIN which is what I wanted.

So it is necessary to move the TREAT from the JOIN statement to the WHERE statement, as it is shown above.

The problem is that this does not always seem possible, in particular, after a UNION or UNION ALL. If I have 2 SELECTs and I want to avoid a subquery in the second one, the kind of manipulation I have shown above does not work. Perhaps, it is related to JPA/Hibernate ?…So it seems required to use JOIN(TREAT(…)) after union() or unionAll() and that actually generates a subquery.

Any way to avoid it anyway ?

By the way, would you recommend union() or unionAll() from the performance perspective ? Database can be MySQL or SQL Server or Oracle. On my local PC, I am working with MySQL. The generated SQL query may not be the same depending on the DB type ?…

So, the query below is generating an exception :

// --- Blaze union query using entities ---
FinalSetOperationCriteriaBuilder<Long> unionQuery = cbf
        .startSet(em, Long.class)

        // --- First query (confLevel OR docGroups) ---
        .from(DocumentGroupPO.class, "dg")
        .innerJoin("dg.document", "d")
        .innerJoin("d.confidentialityLevel", "cl")
        .where("d.id").in(docIds)
        .whereOr()
        .where("cl.levelType").eqLiteral(0)
        .where("dg.group.id").in(personalIds)
        .endOr()
        .select("d.id")

        .union()

        // --- Second query (group + fieldValues / scope function) ---
        .from(DocumentGroupPO.class, "dg")
        .innerJoin("dg.document", "d")
        .innerJoinOn("dg.group", "g")
        .on("TYPE(g)").eqLiteral(ScopeFunctionPO.class)
        .end()
        .innerJoinOn("d.fieldValueSet", "fv")
        .on("TYPE(fv)").eqLiteral(TreeFieldValuePO.class)
        .end()
        .where("d.id").in(docIds)
        .where("g.id").in(personalIds)
        .where("dg.group.id").eqExpression("TREAT(g AS ScopeFunctionPO).function.id")
        .where("TREAT(fv AS TreeFieldValuePO).value.id").eqExpression("TREAT(g AS ScopeFunctionPO).id")
        .where("TREAT(fv AS TreeFieldValuePO).field.id").eqExpression("TREAT(g AS ScopeFunctionPO).scope.id")
        .select("d.id")
        .endSet()   // closes inner set (LeafOngoingFinalSetOperationCriteriaBuilder)
        .endSet();  // closes top-level set (FinalSetOperationCriteriaBuilder)

This query was built based on my first example in order to avoid any subquery and have only join statements. But it does not work and the error is below. There is something wrong in the query after union().

at org.hibernate@6.6.7.Final//org.hibernate.internal.AbstractSharedSessionContract.doReturningWork(AbstractSharedSessionContract.java:1093)


at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.as.weld.common@36.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:62)
at org.jboss.as.weld.common@36.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:72)
at org.jboss.as.weld.common@36.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:85)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:46)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:26)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@36.0.0.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.wildfly.concurrency@36.0.0.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:28)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:34)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInNoTx(CMTTxInterceptor.java:215)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.notSupported(CMTTxInterceptor.java:356)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:132)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.weld.core@5.1.5.Final//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:87)
at org.jboss.as.weld.common@36.0.0.Final//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:72)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:24)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:27)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:47)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:50)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:33)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:633)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:181)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:174)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@36.0.0.Final//org.jboss.as.ejb3.security.IdentityInterceptor.processInvocation(IdentityInterceptor.java:32)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@36.0.0.Final//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:64)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websocket@2.3.18.Final//io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:172)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.security.filters.ReadynessFilter.doFilter(ReadynessFilter.java:55)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at deployment.security.jar//com.prisma.security.auth.sso.SSOHandler.handleRequest(SSOHandler.java:236)
at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:51)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.core@2.3.18.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421)
at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421)
at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256)
at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101)
at io.undertow.core@2.3.18.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:395)
at io.undertow.core@2.3.18.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:861)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:1583)

Caused by: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [(SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id)]
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)
at org.hibernate@6.6.7.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:145)
at org.hibernate@6.6.7.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:132)
at org.hibernate@6.6.7.Final//org.hibernate.query.spi.QueryEngine.interpretHql(QueryEngine.java:54)
at org.hibernate@6.6.7.Final//org.hibernate.internal.AbstractSharedSessionContract.interpretHql(AbstractSharedSessionContract.java:832)
at org.hibernate@6.6.7.Final//org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:878)
at org.hibernate@6.6.7.Final//org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:202)
at com.blazebit//com.blazebit.persistence.impl.AbstractCommonQueryBuilder.getTypedQuery(AbstractCommonQueryBuilder.java:2855)
at com.blazebit//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getTypedQuery(BaseFinalSetOperationBuilderImpl.java:345)
at com.blazebit//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getResultList(BaseFinalSetOperationBuilderImpl.java:501)
at deployment.-engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:225)
… 125 more
Caused by: java.util.NoSuchElementException
at org.hibernate@6.6.7.Final//org.hibernate.internal.util.collections.StandardStack.pop(StandardStack.java:60)
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:495)
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:451)
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:324)
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)

any idea how to fix it and still have no subqueries ?


Finally, the query that actually works but generates a subquery :

.union()

// --- Second query (group + fieldValues / scope function) ---
.from(DocumentGroupPO.class, "dg")
.innerJoin("dg.document", "d")
.innerJoin("TREAT(dg.group AS ScopeFunctionPO)", "g")
.innerJoin("TREAT(d.fieldValueSet AS TreeFieldValuePO)", "fv")
.where("d.id").in(docIds)
.where("g.id").in(personalIds)
.where("dg.group.id").eqExpression("g.function.id")
.where("fv.value.id").eqExpression("g.contentValue.id")
.where("fv.field.id").eqExpression("g.scope.id")
.select("d.id")
.endSet()   // closes inner set (LeafOngoingFinalSetOperationCriteriaBuilder)
.endSet();  // closes top-level set (FinalSetOperationCriteriaBuilder)

this will generate:

union select d2_0.p_iddoc from p_doc_group dgp2_0 join p_doc d2_0 on d2_0.p_iddoc=dgp2_0.p_iddoc join (select * from p_field_value t where t.p_field_type=8) fvs1_0 on d2_0.p_iddoc=fvs1_0.p_iddoc join p_group g2_0 on g2_0.p_idgroup=dgp2_0.p_idgroup where d2_0.p_iddoc in (123456,12345) and case when g2_0.p_group_type=6 then g2_0.p_idgroup end in….

Only use startSet if you plan on connecting a query group with something else. Try something like this instead:

// --- Blaze union query using entities ---
FinalSetOperationCriteriaBuilder<Long> unionQuery = cbf
        .create(em, Long.class)

        // --- First query (confLevel OR docGroups) ---
        .from(DocumentGroupPO.class, "dg")
        .innerJoin("dg.document", "d")
        .innerJoin("d.confidentialityLevel", "cl")
        .where("d.id").in(docIds)
        .whereOr()
        .where("cl.levelType").eqLiteral(0)
        .where("dg.group.id").in(personalIds)
        .endOr()
        .select("d.id")

        .union()

        // --- Second query (group + fieldValues / scope function) ---
        .from(DocumentGroupPO.class, "dg")
        .innerJoin("dg.document", "d")
        .innerJoinOn("dg.group", "g")
        .on("TYPE(g)").eqLiteral(ScopeFunctionPO.class)
        .end()
        .innerJoinOn("d.fieldValueSet", "fv")
        .on("TYPE(fv)").eqLiteral(TreeFieldValuePO.class)
        .end()
        .where("d.id").in(docIds)
        .where("g.id").in(personalIds)
        .where("dg.group.id").eqExpression("TREAT(g AS ScopeFunctionPO).function.id")
        .where("TREAT(fv AS TreeFieldValuePO).value.id").eqExpression("TREAT(g AS ScopeFunctionPO).id")
        .where("TREAT(fv AS TreeFieldValuePO).field.id").eqExpression("TREAT(g AS ScopeFunctionPO).scope.id")
        .select("d.id")
        .endSet()   // closes inner set (LeafOngoingFinalSetOperationCriteriaBuilder)
        .endSet();  // closes top-level set (FinalSetOperationCriteriaBuilder)

Also, unionAll is usually “faster” since the database does not have to eliminate duplicates, but if you don’t want duplicates, then obviously it’s better to use union than union all.

Like I already wrote before, the subquery is generated by Hibernate ORM. We can try to fix that, but I need to see a query execution plan with and without the subquery to understand the implications of the syntax. Also, which database version are you using?

Thanks a lot for your answer. I have tried the query you suggest and, while it works, it still generates a JOIN + subquery after the UNION :

union select d2_0.p_iddoc from p_doc_group dgp2_0 join p_doc d2_0 on d2_0.p_iddoc=dgp2_0.p_iddoc join (select * from p_field_value t where t.p_field_type=8) fvs1_0 on d2_0.p_iddoc=fvs1_0.p_iddoc join p_group g2_0 on g2_0.p_idgroup=dgp2_0.p_idgroup where d2_0.p_iddoc in (227098285,227098286)

Database is MySQL 8.0.18. This is only in my local, current context.

It may be another relational DB type (Oracle, SQL Server) and/or version in another context but the query ideally should not depend on it.

Query execution plan with the subquery :

→ Table scan on (cost=22.6..25.1 rows=14.8) (actual time=0.89..0.891 rows=2 loops=1)
→ Union materialize with deduplication (cost=22.4..22.4 rows=14.8) (actual time=0.888..0.888 rows=2 loops=1)
→ Nested loop inner join (cost=6.75 rows=13.9) (actual time=0.707..0.726 rows=16 loops=1)
→ Nested loop inner join (cost=3.36 rows=2) (actual time=0.684..0.691 rows=2 loops=1)
→ Filter: ((d1_0.p_iddoc in (227098285,227098286)) and (d1_0.p_idconf_level is not null)) (cost=1.16 rows=2) (actual time=0.066..0.0726 rows=2 loops=1)
→ Index range scan on d1_0 using PRIMARY over (p_iddoc = 227098285) OR (p_iddoc = 227098286) (cost=1.16 rows=2) (actual time=0.0347..0.0403 rows=2 loops=1)
→ Single-row index lookup on cl1_0 using PRIMARY (p_idconf_level=d1_0.p_idconf_level) (cost=1.05 rows=1) (actual time=0.309..0.309 rows=1 loops=2)
→ Filter: ((cl1_0.p_level_type = 0) or (dgp1_0.p_idgroup in (4144322,3761318,2254634,2254378,2254377,2254457,2254357,2254379,2254451,2254450,3761312,2254453,2254353,2254452,3761314,2254361,227098135,2254448,2254447,190074806,2254449,2254367,2254446,2254445,2254621,2254363,2862061,2254441))) (cost=1.35 rows=6.96) (actual time=0.0124..0.0157 rows=8 loops=2)
→ Covering index lookup on dgp1_0 using indx_133 (p_iddoc=d1_0.p_iddoc) (cost=1.35 rows=6.96) (actual time=0.0111..0.0137 rows=8 loops=2)
→ Nested loop inner join (cost=14.2 rows=0.87) (actual time=0.0115..0.0115 rows=0 loops=1)
→ Nested loop inner join (cost=6.54 rows=6.96) (actual time=0.0113..0.0113 rows=0 loops=1)
→ Nested loop inner join (cost=4.85 rows=1) (actual time=0.0112..0.0112 rows=0 loops=1)
→ Filter: (t.P_FIELD_TYPE = 8) (cost=4.37 rows=1) (actual time=0.0111..0.0111 rows=0 loops=1)
→ Index range scan on t using indx_157 over (p_iddoc = 227098285) OR (p_iddoc = 227098286), with index condition: ((t.p_iddoc in (227098285,227098286)) and (t.p_iddoc is not null)) (cost=4.37 rows=2) (actual time=0.011..0.011 rows=0 loops=1)
→ Single-row covering index lookup on d2_0 using PRIMARY (p_iddoc=t.p_iddoc) (cost=0.475 rows=1) (never executed)
→ Filter: (dgp2_0.p_idgroup is not null) (cost=1.69 rows=6.96) (never executed)
→ Covering index lookup on dgp2_0 using indx_133 (p_iddoc=t.p_iddoc) (cost=1.69 rows=6.96) (never executed)
→ Filter: ((g2_0.p_idscope = t.p_idparam_field) and (g2_0.p_idscope_value = t.p_idtree_content_value) and (g2_0.p_idfunction = dgp2_0.p_idgroup) and ((case when (g2_0.P_GROUP_TYPE = 6) then dgp2_0.p_idgroup end) in (4144322,3761318,2254634,2254378,2254377,2254457,2254357,2254379,2254451,2254450,3761312,2254453,2254353,2254452,3761314,2254361,227098135,2254448,2254447,190074806,2254449,2254367,2254446,2254445,2254621,2254363,2862061,2254441))) (cost=1 rows=0.125) (never executed)
→ Single-row index lookup on g2_0 using PRIMARY (p_idgroup=dgp2_0.p_idgroup) (cost=1 rows=1) (never executed)

This is the query execution plan without the subquery (i.e. with a JOIN) :

→ Table scan on (cost=8.03..10.5 rows=13.9) (actual time=0.0838..0.084 rows=2 loops=1)
→ Union materialize with deduplication (cost=7.84..7.84 rows=13.9) (actual time=0.083..0.083 rows=2 loops=1)
→ Nested loop inner join (cost=5.25 rows=13.9) (actual time=0.0502..0.0625 rows=16 loops=1)
→ Nested loop inner join (cost=1.86 rows=2) (actual time=0.0393..0.0429 rows=2 loops=1)
→ Filter: ((d1_0.p_iddoc in (227098285,227098286)) and (d1_0.p_idconf_level is not null)) (cost=1.16 rows=2) (actual time=0.0305..0.0335 rows=2 loops=1)
→ Index range scan on d1_0 using PRIMARY over (p_iddoc = 227098285) OR (p_iddoc = 227098286) (cost=1.16 rows=2) (actual time=0.0277..0.0304 rows=2 loops=1)
→ Single-row index lookup on cl1_0 using PRIMARY (p_idconf_level=d1_0.p_idconf_level) (cost=0.3 rows=1) (actual time=0.00402..0.00406 rows=1 loops=2)
→ Filter: ((cl1_0.p_level_type = 0) or (dgp1_0.p_idgroup in (4144322,3761318,2254634,2254378,2254377,2254457,2254357,2254379,2254451,2254450,3761312,2254453,2254353,2254452,3761314,2254361,227098135,2254448,2254447,190074806,2254449,2254367,2254446,2254445,2254621,2254363,2862061,2254441))) (cost=1.35 rows=6.96) (actual time=0.00612..0.00838 rows=8 loops=2)
→ Covering index lookup on dgp1_0 using indx_133 (p_iddoc=d1_0.p_iddoc) (cost=1.35 rows=6.96) (actual time=0.00524..0.00695 rows=8 loops=2)
→ Nested loop inner join (cost=1.2 rows=0.00781) (actual time=0.0106..0.0106 rows=0 loops=1)
→ Nested loop inner join (cost=1.19 rows=0.005) (actual time=0.0104..0.0104 rows=0 loops=1)
→ Inner hash join (no condition) (cost=1.06 rows=0.1) (actual time=0.0102..0.0102 rows=0 loops=1)
→ Filter: (d2_0.p_iddoc in (227098285,227098286)) (cost=4.96 rows=2) (never executed)
→ Covering index range scan on d2_0 using PRIMARY over (p_iddoc = 227098285) OR (p_iddoc = 227098286) (cost=4.96 rows=2) (never executed)
→ Hash
→ Filter: ((g2_0.p_idfunction = g2_0.p_idgroup) and (g2_0.p_idscope is not null)) (cost=1.01 rows=0.05) (actual time=0.0066..0.0066 rows=0 loops=1)
→ Index lookup on g2_0 using idx_grp_pri (P_GROUP_TYPE=6), with index condition: (g2_0.p_idgroup in (4144322,3761318,2254634,2254378,2254377,2254457,2254357,2254379,2254451,2254450,3761312,2254453,2254353,2254452,3761314,2254361,227098135,2254448,2254447,190074806,2254449,2254367,2254446,2254445,2254621,2254363,2862061,2254441)) (cost=1.01 rows=1) (actual time=0.00645..0.00645 rows=0 loops=1)
→ Filter: ((fvs1_0.P_FIELD_TYPE = 8) and (fvs1_0.p_idtree_content_value = g2_0.p_idscope_value)) (cost=1.22 rows=0.05) (never executed)
→ Index lookup on fvs1_0 using idx_pfv_df (p_iddoc=d2_0.p_iddoc, p_idparam_field=g2_0.p_idscope) (cost=1.22 rows=1.18) (never executed)
→ Covering index lookup on dgp2_0 using indx_133 (p_iddoc=d2_0.p_iddoc, p_idgroup=g2_0.p_idgroup) (cost=32.2 rows=1.56) (never executed)

Finally, I a still getting an exception if I try your suggestion together with a JOIN after UNION in Blaze-Persistence (see above excerpt) :

UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at org.hibernate@6.6.7.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)
at org.hibernate@6.6.7.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:145)

Of course, if I manage to prove for the code review that the implementation with the subquery has better performance than the one with the JOIN statement (used in current raw SQL/JDBC code that has to be refactored by Blaze Persistence), then it will be ok to keep it.

Below the raw SQL query that works. There is no CASE WHEN statement that is generated by Hibernate, I guess, and that may actually cause the bug above :

UNION

SELECT d2_0.p_iddoc

FROM p_doc_group dgp2_0

JOIN p_doc d2_0 ON d2_0.p_iddoc = dgp2_0.p_iddoc

JOIN p_field_value fvs1_0

  ON d2_0.p_iddoc = fvs1_0.p_iddoc

 AND fvs1_0.p_field_type = 8

JOIN p_group g2_0 ON g2_0.p_idgroup = dgp2_0.p_idgroup

WHERE d2_0.p_iddoc IN (227098285,227098286)

  AND g2_0.p_group_type = 6

  AND g2_0.p_idgroup IN (

       4144322,3761318,2254634,2254378,2254377,2254457,2254357,2254379,

       2254451,2254450,3761312,2254453,2254353,2254452,3761314,2254361,

       227098135,2254448,2254447,190074806,2254449,2254367,2254446,2254445,

       2254621,2254363,2862061,2254441

  )

  AND g2_0.p_idgroup = g2_0.p_idfunction

  AND fvs1_0.p_idtree_content_value = g2_0.p_idscope_value

  AND fvs1_0.p_idparam_field = g2_0.p_idscope;

Since I just saw it, please upgrade to the latest Hibernate OMR 6.6 version. 6.6.7.Final is very old at this point and many bugs have been fixed. Maybe the newer version will help in some respect.

Done. But I am getting the same error:

Caused by: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)

So it seems impossible to avoid the subquery after UNION (subquery generated by Hibernate ORM based on Blaze-Persistence code). What about the performance of the query containing this subquery vs the one with JOIN (please, see above, the query execution plan), any conclusion? Again, if it is similar in terms of performance, it will be easier to keep the code that generates the subquery.

Can you please post the full stack trace? I don’t see why this query would fail. Maybe also post the entity definitions of the involved entity classes, or even better, please try to create a reproducer with our test case template and if you are able to reproduce the issue, create a bug ticket in our issue tracker and attach that reproducer.

2025-12-01 17:07:37,559 INFO  [com.web.actions.search.SearchAction] (default task-5) executeAdvancedSearch isExternalSourceUsed: false
2025-12-01 17:07:38,427 INFO  [stdout] (default task-5) Hibernate: /* SELECT p.id, p.delegate.id FROM PersonPO p WHERE p.id = :param_0 OR p.delegate.id = :param_1 */ select pp1_0.p_idgroup,pp1_0.p_iddelegate from p_group pp1_0 where (pp1_0.p_idgroup=? or pp1_0.p_iddelegate=?) and pp1_0.p_group_type=1

2025-12-01 17:07:38,640 ERROR [com.prisma.api.security.SecurityHelper] (default task-5) Unable to execute filterDocAccess: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:145)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:132)
at org.hibernate@6.6.31.Final//org.hibernate.query.spi.QueryEngine.interpretHql(QueryEngine.java:54)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.interpretHql(AbstractSharedSessionContract.java:832)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:878)
at org.hibernate@6.6.31.Final//org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:202)
at deployment-ear.ear//com.blazebit.persistence.impl.AbstractCommonQueryBuilder.getTypedQuery(AbstractCommonQueryBuilder.java:2855)
at deployment-



ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getTypedQuery(BaseFinalSetOperationBuilderImpl.java:345)
at deployment-ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getResultList(BaseFinalSetOperationBuilderImpl.java:501)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:222)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:140)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:137)
at deployment-engine.jar//com.api.jpa.hibernate.HReturningWorker.execute(HReturningWorker.java:53)
at org.hibernate@6.6.31.Final//org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:58)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.lambda$doReturningWork$5(AbstractSharedSessionContract.java:1093)
at org.hibernate@6.6.31.Final//org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1097)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doReturningWork(AbstractSharedSessionContract.java:1093)
at deployment-engine.jar//com.api.jpa.Jpa.doReturningWork(Jpa.java:116)
at deployment-engine.jar//com.api.jpa.jdbc.ConnectionReturningWorker.execute(ConnectionReturningWorker.java:72)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:142)
at deployment.engine.jar//com.prisma.api.view.ViewRenderer.getJsonView(ViewRenderer.java:1333)
at deployment.engine.jar//com.api.ejb.ViewEJB$9.run(ViewEJB.java:623)
at deployment-engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:88)
at deployment-engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:125)
at deployment.engine.jar//com.api.ejb.ViewEJB.getDevExpressView(ViewEJB.java:627)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:62)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:72)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:85)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:46)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:26)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@38.0.0.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.wildfly.concurrency@38.0.0.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:28)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:34)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInNoTx(CMTTxInterceptor.java:215)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.notSupported(CMTTxInterceptor.java:356)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:132)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.weld.core@5.1.6.Final//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:87)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:72)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:24)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:27)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:47)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:50)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:33)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at org.wildfly.security.elytron-base@2.7.0.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:633)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:181)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:174)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.security.IdentityInterceptor.processInvocation(IdentityInterceptor.java:32)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:64)
at deployment-engine.jar//com.api.ejb.ViewEJB$$$view37.getDevExpressView(Unknown Source)
at deployment-webapp.war//com.web.actions.search.SearchAction.getHtmlViewData(SearchAction.java:2156)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at deployment-webapp.war//com.web.framework.ActionPerformer.innerLaunchAction(ActionPerformer.java:246)
at deployment-webapp.war//com.web.framework.ActionPerformer.performAction(ActionPerformer.java:216)
at deployment-webapp.war//com.web.framework.ActionPerformer.execute(ActionPerformer.java:104)
at deployment-webapp.war//com.web.framework.controller.FrontController.processRequest(FrontController.java:23)
at deployment-webapp.war//com.web.framework.http.servlet.ActionServlet.doPost(ActionServlet.java:74)
at deployment-webapp.war//com.web.framework.http.servlet.ActionServlet.doGet(ActionServlet.java:56)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websocket@2.3.20.Final//io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:172)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment-webapp.war//com.web.security.filters.SecurityFilter.doFilter(SecurityFilter.java:158)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment-webapp.war//com.web.framework.http.filter.BlockFrameLoadingHeaderFilter.doFilter(BlockFrameLoadingHeaderFilter.java:44)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment-webapp.war//com.web.security.filters.ReadynessFilter.doFilter(ReadynessFilter.java:55)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at deployment-security.jar//com.prisma.security.auth.sso.SSOHandler.handleRequest(SSOHandler.java:236)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.SuspendedServerHandlerWrapper$1$1.handleRequest(SuspendedServerHandlerWrapper.java:50)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.core@2.3.20.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:271)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:130)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:127)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.lambda$new$1(ServletInitialHandler.java:99)
at io.undertow.core@2.3.20.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:395)
at io.undertow.core@2.3.20.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:900)
at org.jboss.threads@3.9.1//org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.util.NoSuchElementException
at org.hibernate@6.6.31.Final//org.hibernate.internal.util.collections.StandardStack.pop(StandardStack.java:60)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:495)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:451)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:324)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)
… 136 more

2025-12-01 17:07:38,645 ERROR [com.api.ejb.ViewEJB] (default task-5) Unable to do getDevExpressView: com.prisma.api.service.data.UncheckedDataException: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at deployment-engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:244)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:140)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:137)
at deployment-engine.jar//com.api.jpa.hibernate.HReturningWorker.execute(HReturningWorker.java:53)
at org.hibernate@6.6.31.Final//org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:58)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.lambda$doReturningWork$5(AbstractSharedSessionContract.java:1093)
at org.hibernate@6.6.31.Final//org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1097)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doReturningWork(AbstractSharedSessionContract.java:1093)
at deployment-engine.jar//com.api.jpa.Jpa.doReturningWork(Jpa.java:116)
at deployment-engine.jar//com.api.jpa.jdbc.ConnectionReturningWorker.execute(ConnectionReturningWorker.java:72)
at deployment-engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:142)
at deployment-engine.jar//com.prisma.api.view.ViewRenderer.getJsonView(ViewRenderer.java:1333)
at deployment-engine.jar//com.api.ejb.ViewEJB$9.run(ViewEJB.java:623)
at deployment-engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:88)
at deployment-engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:125)
at deployment-engine.jar//com.api.ejb.ViewEJB.getDevExpressView(ViewEJB.java:627)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:62)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:72)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:85)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:46)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:26)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@38.0.0.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.wildfly.concurrency@38.0.0.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:28)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:34)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInNoTx(CMTTxInterceptor.java:215)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.notSupported(CMTTxInterceptor.java:356)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:132)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.weld.core@5.1.6.Final//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:87)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:72)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:24)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:27)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:47)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:50)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:33)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at org.wildfly.security.elytron-base@2.7.0.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:633)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:181)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:174)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.security.IdentityInterceptor.processInvocation(IdentityInterceptor.java:32)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:64)
at deployment-engine.jar//com.api.ejb.ViewEJB$$$view37.getDevExpressView(Unknown Source)
at deployment-webapp.war//com.web.actions.search.SearchAction.getHtmlViewData(SearchAction.java:2156)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at deployment-webapp.war//com.web.framework.ActionPerformer.innerLaunchAction(ActionPerformer.java:246)
at deployment-webapp.war//com.web.framework.ActionPerformer.performAction(ActionPerformer.java:216)
at deployment.webapp.war//com.web.framework.ActionPerformer.execute(ActionPerformer.java:104)
at deployment.webapp.war//com.web.framework.controller.FrontController.processRequest(FrontController.java:23)
at deployment-webapp.war//com.web.framework.http.servlet.ActionServlet.doPost(ActionServlet.java:74)
at deployment.webapp.war//com.web.framework.http.servlet.ActionServlet.doGet(ActionServlet.java:56)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websocket@2.3.20.Final//io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:172)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.security.filters.SecurityFilter.doFilter(SecurityFilter.java:158)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.framework.http.filter.BlockFrameLoadingHeaderFilter.doFilter(BlockFrameLoadingHeaderFilter.java:44)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.security.filters.ReadynessFilter.doFilter(ReadynessFilter.java:55)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at 
io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at deployment.security.jar//com.prisma.security.auth.sso.SSOHandler.handleRequest(SSOHandler.java:236)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.SuspendedServerHandlerWrapper$1$1.handleRequest(SuspendedServerHandlerWrapper.java:50)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.core@2.3.20.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:271)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:130)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:127)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.lambda$new$1(ServletInitialHandler.java:99)
at io.undertow.core@2.3.20.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:395)
at io.undertow.core@2.3.20.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:900)
at org.jboss.threads@3.9.1//org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g ON (TYPE(g) = ScopeFunctionPO) JOIN d.fieldValueSet fv ON (TYPE(fv) = TreeFieldValuePO) WHERE d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:145)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:132)
at org.hibernate@6.6.31.Final//org.hibernate.query.spi.QueryEngine.interpretHql(QueryEngine.java:54)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.interpretHql(AbstractSharedSessionContract.java:832)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:878)
at org.hibernate@6.6.31.Final//org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:202)
at deployment.ear.ear//com.blazebit.persistence.impl.AbstractCommonQueryBuilder.getTypedQuery(AbstractCommonQueryBuilder.java:2855)
at deployment.ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getTypedQuery(BaseFinalSetOperationBuilderImpl.java:345)
at deployment.ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getResultList(BaseFinalSetOperationBuilderImpl.java:501)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:222)
… 126 more
Caused by: java.util.NoSuchElementException
at org.hibernate@6.6.31.Final//org.hibernate.internal.util.collections.StandardStack.pop(StandardStack.java:60)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:495)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:451)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:324)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)
… 136 more

I think the exception is due to :

.innerJoinOn("d.fieldValueSet", "fv")
.on("TYPE(fv)").eqLiteral(TreeFieldValuePO.class)
.end()

Analogous code works in another place but with no UNION before it, while here there is a UNION before. And another difference is that here is a OneToMany (fieldValueSet) association. In the other case, it is a ManyToOne.

I just tried this HQL query with the following model and don’t see a NullPointerException, so I assume that something in your model might be different. Can you post the model? This is what I used for testing:

	@Entity(name = "DocumentGroupPO")
	static class DocumentGroupPO {
		@Id
		Long id;
		@ManyToOne(fetch = FetchType.LAZY)
		DocumentPO document;
		@ManyToOne(fetch = FetchType.LAZY)
		GroupPO group;
	}
	@Entity(name = "DocumentPO")
	static class DocumentPO {
		@Id
		Long id;
		@ManyToOne(fetch = FetchType.LAZY)
		ConfidentialityLevelPO confidentialityLevel;
		@OneToMany
		Set<FieldValuePO> fieldValueSet;

	}
	@Entity(name = "ConfidentialityLevelPO")
	static class ConfidentialityLevelPO {
		@Id
		Long id;
		Integer levelType;
	}
	@Entity(name = "GroupPO")
	static class GroupPO {
		@Id
		Long id;
		@ManyToOne(fetch = FetchType.LAZY)
		FunctionPO function;
		@ManyToOne(fetch = FetchType.LAZY)
		ScopePO scope;
	}
	@Entity(name = "FunctionPO")
	static class FunctionPO {
		@Id
		Long id;
	}
	@Entity(name = "ScopePO")
	static class ScopePO {
		@Id
		Long id;
	}
	@Entity(name = "ScopeFunctionPO")
	static class ScopeFunctionPO extends GroupPO {

	}
	@Entity(name = "FieldValuePO")
	static class FieldValuePO {
		@Id
		Long id;
		@ManyToOne(fetch = FetchType.LAZY)
		FieldPO field;
		@ManyToOne(fetch = FetchType.LAZY)
		ValuePO value;
	}
	@Entity(name = "TreeFieldValuePO")
	static class TreeFieldValuePO extends FieldValuePO {

	}
	@Entity(name = "FieldPO")
	static class FieldPO {
		@Id
		Long id;
		String name;
	}
	@Entity(name = "ValuePO")
	static class ValuePO {
		@Id
		Long id;
		String value;
	}

Instead of DocumentPO, the name is AbstractDocumentPO, and this class is abstract. The associations seem correct me. Generally, there are discriminators everywhere in addition to what you wrote, together with inheritance. In the class, where you put: DocumentPO document => should be: AbstractDocumentPO document. value field is in TreeFieldValuePO; it is neither in ValuePO, nor in FieldValuePO

I tried to do these changes, but still, I can’t reproduce the NPE. Please try to create a reproducer with our test case template and if you are able to reproduce the issue, create a bug ticket in our issue tracker and attach that reproducer.

scope and function fields are actually in ScopeFunctionPO (=> that extends GroupPO). Type of function: ScopeDefinedFunctionPO (that in fine extends GroupPO). Type of scope: TreeParamFieldPO (that extends FieldPO). Unfortunately, I do not have time currently to do more than provide these details.

I have tried to rewrite the query. I am getting this :

06:23:39,821 ERROR [com.api.ejb.ViewEJB] (default task-2) Unable to do getDevExpressView: com.prisma.api.service.data.UncheckedDataException: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g JOIN d.fieldValueSet fv WHERE TYPE(g) = ScopeFunctionPO AND TYPE(fv) = TreeFieldValuePO AND d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at deployment.engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:250)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:140)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper$2.execute(SecurityHelper.java:137)
at deployment.engine.jar//com.api.jpa.hibernate.HReturningWorker.execute(HReturningWorker.java:53)
at org.hibernate@6.6.31.Final//org.hibernate.jdbc.WorkExecutor.executeReturningWork(WorkExecutor.java:58)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.lambda$doReturningWork$5(AbstractSharedSessionContract.java:1093)
at org.hibernate@6.6.31.Final//org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:303)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doWork(AbstractSharedSessionContract.java:1097)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.doReturningWork(AbstractSharedSessionContract.java:1093)
at deployment.engine.jar//com.api.jpa.Jpa.doReturningWork(Jpa.java:116)
at deployment.engine.jar//com.api.jpa.jdbc.ConnectionReturningWorker.execute(ConnectionReturningWorker.java:72)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:142)
at deployment.engine.jar//com.prisma.api.view.ViewRenderer.getJsonView(ViewRenderer.java:1333)
at deployment.engine.jar//com.api.ejb.ViewEJB$9.run(ViewEJB.java:623)
at deployment.engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:88)
at deployment.engine.jar//com.prisma.api.framework.jdbc.JdbcActionTemplate.execute(JdbcActionTemplate.java:125)
at deployment.engine.jar//com.api.ejb.ViewEJB.getDevExpressView(ViewEJB.java:627)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:62)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:72)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:85)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:46)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:26)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.jpa@38.0.0.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.wildfly.concurrency@38.0.0.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:28)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:35)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:34)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInNoTx(CMTTxInterceptor.java:215)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.notSupported(CMTTxInterceptor.java:356)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:132)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
at org.jboss.weld.core@5.1.6.Final//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:87)
at org.jboss.as.weld.common@38.0.0.Final//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:72)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:24)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:30)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:27)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:47)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:50)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:33)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at org.wildfly.security.elytron-base@2.7.0.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:633)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:181)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:174)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@38.0.0.Final//org.jboss.as.ejb3.security.IdentityInterceptor.processInvocation(IdentityInterceptor.java:32)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@2.0.1.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@38.0.0.Final//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:64)
at deployment.engine.jar//com.api.ejb.ViewEJB$$$view37.getDevExpressView(Unknown Source)
at deployment.webapp.war//com.web.actions.search.SearchAction.getHtmlViewData(SearchAction.java:2156)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at deployment.webapp.war//com.web.framework.ActionPerformer.innerLaunchAction(ActionPerformer.java:246)
at deployment.webapp.war//com.web.framework.ActionPerformer.performAction(ActionPerformer.java:216)
at deployment.webapp.war//com.web.framework.ActionPerformer.execute(ActionPerformer.java:104)
at deployment.webapp.war//com.web.framework.controller.FrontController.processRequest(FrontController.java:23)
at deployment.webapp.war//com.web.framework.http.servlet.ActionServlet.doPost(ActionServlet.java:74)
at deployment.webapp.war//com.web.framework.http.servlet.ActionServlet.doGet(ActionServlet.java:56)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
at jakarta.servlet.api@6.0.0//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websocket@2.3.20.Final//io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:172)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.security.filters.SecurityFilter.doFilter(SecurityFilter.java:158)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.framework.http.filter.BlockFrameLoadingHeaderFilter.doFilter(BlockFrameLoadingHeaderFilter.java:44)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.webapp.war//com.web.security.filters.ReadynessFilter.doFilter(ReadynessFilter.java:55)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at deployment.security.jar//com.prisma.security.auth.sso.SSOHandler.handleRequest(SSOHandler.java:236)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.SuspendedServerHandlerWrapper$1$1.handleRequest(SuspendedServerHandlerWrapper.java:50)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.core@2.3.20.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:271)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:130)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:127)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at org.wildfly.extension.undertow@38.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1433)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
at io.undertow.servlet@2.3.20.Final//io.undertow.servlet.handlers.ServletInitialHandler.lambda$new$1(ServletInitialHandler.java:99)
at io.undertow.core@2.3.20.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:395)
at io.undertow.core@2.3.20.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:900)
at org.jboss.threads@3.9.1//org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
at org.jboss.threads@3.9.1//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.hibernate.query.sqm.InterpretationException: Error interpreting query [null] [SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
UNION
SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN dg.group g JOIN d.fieldValueSet fv WHERE TYPE(g) = ScopeFunctionPO AND TYPE(fv) = TreeFieldValuePO AND d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = CASE WHEN TYPE(g) IN (ScopeFunctionPO) THEN g.id END AND CASE WHEN TYPE(fv) IN (TreeFieldValuePO) THEN fv.field.id END = g.scope.id]
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:95)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:145)
at org.hibernate@6.6.31.Final//org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:132)
at org.hibernate@6.6.31.Final//org.hibernate.query.spi.QueryEngine.interpretHql(QueryEngine.java:54)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.interpretHql(AbstractSharedSessionContract.java:832)
at org.hibernate@6.6.31.Final//org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:878)
at org.hibernate@6.6.31.Final//org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:202)
at deployment.ear.ear//com.blazebit.persistence.impl.AbstractCommonQueryBuilder.getTypedQuery(AbstractCommonQueryBuilder.java:2855)
at deployment.ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getTypedQuery(BaseFinalSetOperationBuilderImpl.java:345)
at deployment.ear.ear//com.blazebit.persistence.impl.BaseFinalSetOperationBuilderImpl.getResultList(BaseFinalSetOperationBuilderImpl.java:501)
at deployment.engine.jar//com.prisma.api.security.SecurityHelper.filterDocAccess(SecurityHelper.java:228)
… 126 more
Caused by: java.util.NoSuchElementException
at org.hibernate@6.6.31.Final//org.hibernate.internal.util.collections.StandardStack.pop(StandardStack.java:60)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:495)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:451)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:324)
at org.hibernate@6.6.31.Final//org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)

with this query (after UNION) :

.from(DocumentGroupPO.class, "dg")
        .innerJoin("dg.document", "d")
        .innerJoin("dg.group", "g")   // polymorphic root
        .innerJoin("d.fieldValueSet", "fv")

        // --- Type constraints ---
        .where("TYPE(g)").eqLiteral(ScopeFunctionPO.class)
        .where("TYPE(fv)").eqLiteral(TreeFieldValuePO.class)

        // --- Filters ---
        .where("d.id").in(docIds)
        .where("g.id").in(personalIds)

        // --- Correlations ---
        .whereExpression("dg.group.id = TREAT(g AS ScopeFunctionPO).function.id")
        .whereExpression("TREAT(fv AS TreeFieldValuePO).value.id = TREAT(g AS ScopeFunctionPO).id")
        .whereExpression("TREAT(fv AS TreeFieldValuePO).field.id = TREAT(g AS ScopeFunctionPO).scope.id")

        .select("d.id")
        .endSet();

Finally, the request below works.

I did my best to avoid One to Many, having Many to One instead. That’s why I started from TreeFieldValuePO. There is no subquery left.

Do you think it does the same thing as the initial request ?

.from(TreeFieldValuePO.class, "fv")
.from(DocumentGroupPO.class, "dg")   // second root required
// fv → document
.innerJoin("fv.document", "d")

// d → fieldValueSet
.innerJoin("d.fieldValueSet", "fvs")   // this is where fieldValueSet really is

// dg → group
.innerJoin("dg.group", "g")

// correlate dg to document (no inverse on AbstractDocumentPO)
.whereExpression("dg.document.id = d.id")

// type constraint
.where("TYPE(g)").eqLiteral(ScopeFunctionPO.class)

// external filters
.where("d.id").in(docIds)
.where("g.id").in(personalIds)

// correlations
.whereExpression("dg.group.id = TREAT(g AS ScopeFunctionPO).function.id")
.whereExpression("fv.value.id = g.id")
.whereExpression("fv.field.id = TREAT(g AS ScopeFunctionPO).scope.id")

.select("d.id")
.endSet();
2025-12-03 07:16:59,948 INFO  [stdout] (default task-2) Hibernate: /* SELECT d.id FROM DocumentGroupPO dg JOIN dg.document d JOIN d.confidentialityLevel cl WHERE d.id IN (:param_0) AND (cl.levelType = 0 OR dg.group.id IN (:param_1))
2025-12-03 07:16:59,948 INFO  [stdout] (default task-2) UNION
2025-12-03 07:16:59,948 INFO  [stdout] (default task-2) SELECT d.id FROM TreeFieldValuePO fv JOIN fv.document d JOIN d.fieldValueSet fvs, DocumentGroupPO dg JOIN dg.group g WHERE dg.document.id = d.id AND TYPE(g) = ScopeFunctionPO AND d.id IN (:param_2) AND g.id IN (:param_3) AND dg.group.id = g.function.id AND fv.value.id = g.id AND fv.field.id = g.scope.id */ select d1_0.p_iddoc from p_doc_group dgp1_0 join p_doc d1_0 on d1_0.p_iddoc=dgp1_0.p_iddoc join p_conf_level cl1_0 on cl1_0.p_idconf_level=d1_0.p_idconf_level where d1_0.p_iddoc in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) and (cl1_0.p_level_type=0 or dgp1_0.p_idgroup in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)) union select d2_0.p_iddoc from p_field_value tfvp1_0 join p_doc d2_0 on d2_0.p_iddoc=tfvp1_0.p_iddoc join p_field_value fvs1_0 on d2_0.p_iddoc=fvs1_0.p_iddoc,p_doc_group dgp2_0 join p_group g2_0 on g2_0.p_idgroup=dgp2_0.p_idgroup where dgp2_0.p_iddoc=d2_0.p_iddoc and g2_0.p_group_type=6 and d2_0.p_iddoc in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) and g2_0.p_idgroup in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) and g2_0.p_idgroup=g2_0.p_idfunction and tfvp1_0.p_idtree_content_value=g2_0.p_idgroup and tfvp1_0.p_idparam_field=g2_0.p_idscope and tfvp1_0.p_field_type=8

It’s hard to say for sure without knowing your requirements, but it looks ok to me.

I’m actually thinking now that the NoSuchElementException might be swallowing the real exception, because of the code flow. Could you please set a break point in visitSelectStatement and step through it to see if another exception is thrown before reaching the finally block that tries to do processingStateStack.pop()?

I have done this and actually the exception is thrown inside :

processingStateStack.pop();

because the stack is empty. The finally block is reached.