Вопрос:
Я получаю сообщение об ошибке 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.