Org.hibernate.query.SemanticException в запросе Spring

У меня есть этот запрос:

List<AspectEs> findAllByProcessedIsTrueAndNatalIsOrSolarIs
            (Boolean processed, Integer natal, Integer solar);

Но у меня есть эта ошибка:

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.mysticriver.repository.AspectEsRepository.findAllByProcessedIsTrueAndNatalIsOrSolarIs(java.lang.Boolean,java.lang.Integer,java.lang.Integer); Cannot compare left expression of type 'java.lang.Integer' with right expression of type 'java.lang.Boolean'
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:106)

определение столбца:

  @Column(columnDefinition = "bit default 0 ")
    private Boolean processed;
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
349
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Что произойдет, если вы измените «Обработано» на «Целое число»?

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

Ваша подпись метода:

List<AspectEs> findAllByProcessedIsTrueAndNatalIsOrSolarIs
            (Boolean processed, Integer natal, Integer solar);

является противоречивым. Из названия следует, что processed равен true, и в то же время существует processed параметр.

Сделайте либо это:

List<AspectEs> findAllByProcessedIsTrueAndNatalIsOrSolarIs
            (Integer natal, Integer solar);

или:

List<AspectEs> findAllByProcessedIsAndNatalIsOrSolarIs
            (Boolean processed, Integer natal, Integer solar);

Однако здесь вы смешиваете условия and и or, что приведет к следующему порядку вычислений:

(processed = value and natal = value) or (solar = value)

Вероятно, это не то, чего вы хотите.

Ошибка возникает из-за того, что сигнатура метода findAllByProcessedIsTrueAndNatalIsOrSolarIs неправильно интерпретируется Spring Data JPA. Проблема заключается в интерпретации имени метода.

Чтобы правильно выразить логику вашего запроса, вы можете использовать круглые скобки для группировки условий. Вот исправленный метод запроса:

Список findAllByProcessedIsTrueAnd(NatalIsIsTrueOrSolarIsTrue(Boolean обработано, Integer natal, Integer Solar); Затем вы должны определить собственные методы запроса в своем репозитории, используя аннотацию @Query, чтобы правильно выразить условия:

@Query("ВЫБЕРИТЕ ИЗ Аспектов a WHERE a.processed = true AND (a.natal = :natal OR a.solar = :solar)") Список findAllByProcessedIsTrueAndNatalIsOrSolarIs(@Param("natal") Integer natal, @Param("solar") Integer Solar);

Это позволит правильно интерпретировать условия и соответствующим образом сгенерировать запрос. Убедитесь, что @Query и @Param импортированы из org.springframework.data.jpa.repository.Query и org.springframework.data.repository.query.Param соответственно.

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

Что на самом деле делает /actuator/health?
NullPointerException: невозможно вызвать «org.modelmapper.ModelMapper.map(Object, java.lang.Class)», поскольку «this.modelMapper» имеет значение null
Весна-данные-elasticsearch elasticsearch opensearch обновление весенней загрузки
Spring собственный kafka.common.KafkaException: не удалось найти общедоступный конструктор без аргументов для io.confluent.kafka.serializers.KafkaJsonSerializer
Нужен ли мне собственный диалект Oracle, а также собственный DialectProvider только для создания веб-приложения Spring Boot Java с базой данных Oracle?
WebFlux Sinks для мультисервисной потоковой передачи
Интернационализация в Spring Boot с тимелеафом
Десериализовать и сериализовать поля ZonedDateTime в общих объектах между контроллерами в зависимости от того, для какого контроллера они используются в качестве параметра?
Java Spring Boot 2.11 не будет использовать TLS 1.3 для исходящего подключения к API
Обработка авторизации в загрузочном приложении OAuth 2.0 Spring при взаимодействии со сторонней службой