Java.lang.NullPointerException в org.hibernate.hql.internal.NameGenerator.generateColumnNames(NameGenerator.java:27)

У меня возникла проблема при выполнении множественного выбора CriteriaAPI из Join с использованием CriteriaBuilder.function ("group_concat") со следующими объектами и запросами:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<RegistryGroupRow> c = cb.createQuery(RegistryGroupRow.class);
    Root<RegistryGroupEntity> registryGroup = c.from(RegistryGroupEntity.class);

    Join<RegistryGroupEntity, ServiceEntity> serviceJoin = registryGroup.join(RegistryGroupEntity_.services, JoinType.INNER);

    c.multiselect(registryGroup.get(RegistryGroupEntity_.id),
            registryGroup.get(RegistryGroupEntity_.name),
            cb.function("group_concat", String.class, serviceJoin.get(ServiceEntity_.name), cb.literal(true),
                    cb.literal(", "), serviceJoin.get(ServiceEntity_.name),
                    cb.literal("DESC")).alias("name"));
    c.where().groupBy(registryGroup.get(RegistryGroupEntity_.name));
    c.orderBy(cb.desc(registryGroup.get(RegistryGroupEntity_.id)));

    List<Predicate> criteria = getRegistryGroupPredicates(cb, registryGroup, filter, c);
    if (criteria.size() == 1) {
        c.where(criteria.get(0));
    } else if (criteria.size() > 0) {
        c.where(cb.and(criteria.toArray(new Predicate[0])));
    }

    TypedQuery<RegistryGroupRow> q = entityManager.createQuery(c);
    Map<String, Object> paramValues = getRegistryGroupParamValues(filter);
    for (String name : paramValues.keySet()) {
        q.setParameter(name, paramValues.get(name));
    }

    if (offset != null) {
        q.setFirstResult(offset);
    }
    if (limit != null) {
        q.setMaxResults(limit);
    }

    return q.getResultList();


@Entity
@Table(name = "registry_groups")
public class RegistryGroupEntity {
    @Id
    @SequenceGenerator(name = "registry_groups_gen", sequenceName = "registry_groups_id_seq", allocationSize = 1)
    @GeneratedValue(generator = "registry_groups_gen")
    private Integer id;
    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "registryGroup")
    private Collection<ServiceEntity> services;
//setters-getters ommited
}

@Entity
@Table(name = "services")
public class ServiceEntity {
    @Id
    @SequenceGenerator(name = "service_gen", sequenceName = "services_id_seq", allocationSize = 1)
    @GeneratedValue(generator = "service_gen")
    private Integer id;
    @Column(nullable = false, length = 100)
    private String name;

    @Column(name = "registry_group_id", insertable = false, updatable = false)
    private Integer registryGroupId;

}

Итак, когда запрос выполняется, он завершается с ошибкой:

SEVERE: 
java.lang.NullPointerException
    at org.hibernate.hql.internal.NameGenerator.generateColumnNames(NameGenerator.java:27)
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.generateColumnNames(SessionFactoryHelper.java:418)
    at org.hibernate.hql.internal.ast.tree.SelectClause.initializeColumnNames(SelectClause.java:269)
    at org.hibernate.hql.internal.ast.tree.SelectClause.finishInitialization(SelectClause.java:259)
    at org.hibernate.hql.internal.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:254)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:1011)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:779)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:675)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:545)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:654)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:3307)
    at org.hibernate.query.criteria.internal.CriteriaQueryImpl$1.buildCompiledQuery(CriteriaQueryImpl.java:318)
    at org.hibernate.query.criteria.internal.compile.CriteriaCompiler.compile(CriteriaCompiler.java:127)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:3600)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:203)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:301)
    at com.sun.proxy.$Proxy111.createQuery(Unknown Source)
    at com.openpayment.impl.dao.RegistryGroupDaoImpl.getRegistryGroupRows(RegistryGroupDaoImpl.java:247)
    at com.openpayment.impl.service.RegistryGroupServiceImpl.getRegistryGroupRows(RegistryGroupServiceImpl.java:67)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:69)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:283)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy174.getRegistryGroupRows(Unknown Source)
    at com.openpayment.web.view.registry.RegistryGroupView.lambda$buildTable$7f718060$1(RegistryGroupView.java:167)
    at com.vaadin.data.provider.CallbackDataProvider.fetchFromBackEnd(CallbackDataProvider.java:137)
    at com.vaadin.data.provider.AbstractBackEndDataProvider.fetch(AbstractBackEndDataProvider.java:61)
    at com.vaadin.data.provider.DataCommunicator.fetchItemsWithRange(DataCommunicator.java:404)
    at com.vaadin.data.provider.DataCommunicator.sendDataToClient(DataCommunicator.java:377)
    at com.vaadin.data.provider.DataCommunicator.beforeClientResponse(DataCommunicator.java:339)
    at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:126)
    at com.vaadin.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:124)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1606)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:448)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:835)

В

generateColumnNames:25, NameGenerator (org.hibernate.hql.internal)
generateColumnNames:418, SessionFactoryHelper (org.hibernate.hql.internal.ast.util)
initializeColumnNames:269, SelectClause (org.hibernate.hql.internal.ast.tree)
finishInitialization:259, SelectClause (org.hibernate.hql.internal.ast.tree)
initializeExplicitSelectClause:254, SelectClause (org.hibernate.hql.internal.ast.tree)
useSelectClause:1011, HqlSqlWalker (org.hibernate.hql.internal.ast)
processQuery:779, HqlSqlWalker (org.hibernate.hql.internal.ast)
query:675, HqlSqlBaseWalker (org.hibernate.hql.internal.antlr)
selectStatement:311, HqlSqlBaseWalker (org.hibernate.hql.internal.antlr)
statement:259, HqlSqlBaseWalker (org.hibernate.hql.internal.antlr)
analyze:261, QueryTranslatorImpl (org.hibernate.hql.internal.ast)
doCompile:189, QueryTranslatorImpl (org.hibernate.hql.internal.ast)
compile:141, QueryTranslatorImpl (org.hibernate.hql.internal.ast)
<init>:115, HQLQueryPlan (org.hibernate.engine.query.spi)
<init>:77, HQLQueryPlan (org.hibernate.engine.query.spi)
getHQLQueryPlan:153, QueryPlanCache (org.hibernate.engine.query.spi)
getQueryPlan:545, AbstractSharedSessionContract (org.hibernate.internal)
createQuery:654, AbstractSharedSessionContract (org.hibernate.internal)
createQuery:3307, SessionImpl (org.hibernate.internal)
buildCompiledQuery:318, CriteriaQueryImpl$1 (org.hibernate.query.criteria.internal)
compile:127, CriteriaCompiler (org.hibernate.query.criteria.internal.compile)
createQuery:3600, SessionImpl (org.hibernate.internal)
createQuery:203, SessionImpl (org.hibernate.internal)
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:567, Method (java.lang.reflect)
invoke:301, SharedEntityManagerCreator$SharedEntityManagerInvocationHandler (org.springframework.orm.jpa)
createQuery:-1, $Proxy111 (com.sun.proxy)
getRegistryGroupRows:247, RegistryGroupDaoImpl (com.openpayment.impl.dao)
getRegistryGroupRows:67, RegistryGroupServiceImpl (com.openpayment.impl.service)
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:567, Method (java.lang.reflect)
invokeJoinpointUsingReflection:333, AopUtils (org.springframework.aop.support)
invokeJoinpoint:190, ReflectiveMethodInvocation (org.springframework.aop.framework)
proceed:157, ReflectiveMethodInvocation (org.springframework.aop.framework)
invoke:69, MethodSecurityInterceptor (org.springframework.security.access.intercept.aopalliance)
proceed:179, ReflectiveMethodInvocation (org.springframework.aop.framework)
proceedWithInvocation:99, TransactionInterceptor$1 (org.springframework.transaction.interceptor)
invokeWithinTransaction:283, TransactionAspectSupport (org.springframework.transaction.interceptor)
invoke:96, TransactionInterceptor (org.springframework.transaction.interceptor)
proceed:179, ReflectiveMethodInvocation (org.springframework.aop.framework)
invoke:213, JdkDynamicAopProxy (org.springframework.aop.framework)
getRegistryGroupRows:-1, $Proxy174 (com.sun.proxy)
lambda$buildTable$7f718060$1:167, RegistryGroupView (com.openpayment.web.view.registry)
fetch:-1, 1332458831 (com.openpayment.web.view.registry.RegistryGroupView$$Lambda$332)
fetchFromBackEnd:137, CallbackDataProvider (com.vaadin.data.provider)
fetch:61, AbstractBackEndDataProvider (com.vaadin.data.provider)
fetchItemsWithRange:404, DataCommunicator (com.vaadin.data.provider)
sendDataToClient:377, DataCommunicator (com.vaadin.data.provider)
beforeClientResponse:339, DataCommunicator (com.vaadin.data.provider)
write:126, UidlWriter (com.vaadin.server.communication)
writeUidl:124, UidlRequestHandler (com.vaadin.server.communication)
synchronizedHandleRequest:92, UidlRequestHandler (com.vaadin.server.communication)
handleRequest:40, SynchronizedRequestHandler (com.vaadin.server)
handleRequest:1606, VaadinService (com.vaadin.server)
service:448, VaadinServlet (com.vaadin.server)
service:728, HttpServlet (javax.servlet.http)
internalDoFilter:305, ApplicationFilterChain (org.apache.catalina.core)
doFilter:210, ApplicationFilterChain (org.apache.catalina.core)
doFilter:51, WsFilter (org.apache.tomcat.websocket.server)
internalDoFilter:243, ApplicationFilterChain (org.apache.catalina.core)
doFilter:210, ApplicationFilterChain (org.apache.catalina.core)
invoke:222, StandardWrapperValve (org.apache.catalina.core)
invoke:123, StandardContextValve (org.apache.catalina.core)
invoke:502, AuthenticatorBase (org.apache.catalina.authenticator)
invoke:171, StandardHostValve (org.apache.catalina.core)
invoke:100, ErrorReportValve (org.apache.catalina.valves)
invoke:953, AccessLogValve (org.apache.catalina.valves)
invoke:118, StandardEngineValve (org.apache.catalina.core)
service:408, CoyoteAdapter (org.apache.catalina.connector)
process:1041, AbstractHttp11Processor (org.apache.coyote.http11)
process:603, AbstractProtocol$AbstractConnectionHandler (org.apache.coyote)
run:312, JIoEndpoint$SocketProcessor (org.apache.tomcat.util.net)
runWorker:1128, ThreadPoolExecutor (java.util.concurrent)
run:628, ThreadPoolExecutor$Worker (java.util.concurrent)
run:835, Thread (java.lang)

оказалось, что массив Types имеет размер 3, но имеет только два значения, Integer и String.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

оказалось, что массив Types имеет размер 3, но имеет только два значения, Integer и String.

Другие вопросы по теме