Значение параметра [1] не соответствует ожидаемому типу [java.lang.Boolean]

Вопрос:Я получаю сообщение об ошибке Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [1] did not match expected type [java.lang.Boolean]; nested exception is java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Boolean]. Я смущен этим, потому что это происходит из приведенного ниже метода службы, который закомментирован. Когда я прокомментирую это, ошибка будет устранена. Столбец active

Вопрос:

Я получаю сообщение об ошибке Exception in thread «main» org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [1] did not match expected type [java.lang.Boolean]; nested exception is java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Boolean].

Я смущен этим, потому что это происходит из приведенного ниже метода службы, который закомментирован. Когда я прокомментирую это, ошибка будет устранена. Столбец active представляет собой TINYINT(1), который либо 1, либо 0.

Entity:

@Entity @NamedQueries({ @NamedQuery(name=»Workflow.findByUUID», query=»SELECT w FROM Workflow w WHERE w.uuid = :uuid»), @NamedQuery(name=»Workflow.findByActive», query=»SELECT w FROM Workflow w WHERE w.active = :active ORDER BY id ASC») })

Мой репозиторий:

@Repository public interface WorkflowRepository extends JpaRepository<Workflow, Integer> { List<Workflow> findByActive(@Param(«active») Integer active); }

Моя служба:

@Service public class WorkflowService { @Autowired WorkflowRepository workflowRepository; /** * Get active workflows */ @Transactional(readOnly = true) public List<Workflow> findActive() { //return workflowRepository.findByActive(1); return null; }

Когда я раскомментирую

Лучший ответ:

Кажется, что вы сопоставили атрибут Workflow.active как Boolean. Таким образом, вы должны располагать репозиторий:

@Repository public interface WorkflowRepository extends JpaRepository<Workflow, Boolean> { List<Workflow> findByActive(@Param(«active») Boolean active); }

И вызов workflowRepository.findByActive(true) должен вести себя так, как вы хотите.

Дело в том, что HQL иногда делает разницу между базами данных и сопоставлением Java, поскольку типизация в этих средах не одинакова. Поэтому проверьте тип Entity active, чтобы сделать соответствующий Repository.

Оцените статью
Добавить комментарий