У меня есть этот запрос:
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;




Что произойдет, если вы измените «Обработано» на «Целое число»?
Ваша подпись метода:
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 соответственно.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.