Репозиторий JPA Boolean Query - возвращает исключение нулевого указателя

У меня есть проект Java springBoot С репозиторием, который включает логический пользовательский запрос. но система работает с исключением нулевого указателя, кроме возврата «false». это запрос:

@Query(value = "select * from customers_vs_coupons where customer_id =? and coupon_id = ?", nativeQuery = true)
    Boolean existsPurchesedCoupon(int customerId, int couponId);

Я назвал метод:

if (customerRepository.customerPurchesedCoupon(customerId, coupon.getId())) {
            throw new PurchaseCouponException("can buy only once.");

и это ошибка:

 [Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "com.chana.repositories.CustomerRepository.customerPurchesedCoupon(int, int)" is null] with root cause   ```
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш запрос

select * from customers_vs_coupons where customer_id =? and coupon_id = ?

предназначен для возврата любого объекта (далее именуемого CustomersVsCoupons), сопоставленного с таблицей customer_vs_coupons, а не с логическим значением.

Если вы хотите создать исключение всякий раз, когда у конкретного клиента уже есть затронутый купон, вы должны преобразовать сигнатуру вашего метода в:

  • Возвратите CustomersVsCoupons и создайте исключение, если ваш запрос не вернул значение null
  • Возвратите необязательный <CustomersVsCoupons> и создайте исключение, если ваш запрос действительно вернул не пустой необязательный

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