Передать параметр в запрос

#java #hibernate #hql #spring-data-rest

#java #спящий режим #hql #spring-data-rest

Вопрос:

Я столкнулся с проблемой при передаче аргументов в этот запрос. Когда я пытаюсь запустить, я получаю исключение.

 @Query("select o from Offer o, OfferCriteria ocg where o = ocg.offer and ocg.criteria = 'gender' and ocg.criteriaValue in (2, (select c.gender from Customer as c where c.id = :Id)) ")
    List<Offer> findOffersForCustomer(@Param("Id") String customerId)
  

Исключением является

 Caused by: java.lang.NullPointerException: null
    at org.hibernate.hql.internal.ast.ParameterTranslationsImpl.getNamedParameterExpectedType(ParameterTranslationsImpl.java:92)
    at org.hibernate.engine.query.spi.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:383)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:145)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:342)
    at com.sun.proxy.$Proxy83.createQuery(Unknown Source)
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:74)
  

Похоже, что при передаче идентификатора параметра во вложенный запрос возникает проблема.
Я могу предоставить более подробную информацию, если этого недостаточно.

Если я изменю запрос на

 select o from Offer o, OfferCriteria ocg where o = ocg.offer and ocg.criteria = 'gender' and ocg.criteriaValue = (select c.gender from Customer as c where c.id = :Id)
  

Я запускаю его, но никакие предложения не возвращаются для предоставленного идентификатора клиента, даже если это необходимо.

Комментарии:

1. Не могли бы вы вставить код здесь, где вы устанавливаете параметры.

2. Его данные spring остаются, поэтому параметр устанавливается чуть ниже аннотации @Query в объявлении метода.