Класс X не может быть приведен к классу Boolean (X находится в безымянном модуле загрузчика 'app'; логическое значение находится в модуле java.base загрузчика 'bootstrap

Я заметил, что когда у других возникает эта проблема, это происходит потому, что они пытаются приводить объекты. Я не пытаюсь бросать. Кроме того, я пытаюсь спросить, существует ли объект в таблице данных, используя репозиторий Spring Boot. Возникает следующая проблема:

В чем именно проблема?

Модель:

@Entity
@Table(name = "skillGroup")
@Data
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class SkillGroup {
    @Id
    @Column(name = "id")
    @SequenceGenerator(
            name = "skillGroup_sequence",
            sequenceName = "skillGroup_sequence",
            allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "skillGroup_sequence")
    private Long id;

    @Column(name = "name", columnDefinition = "TEXT", unique = true, nullable = false)
    private String name;

    @Column(name = "type", columnDefinition = "CHAR(2)")
    private char type;
}

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

@Repository
public interface SkillGroupRepo extends
        JpaRepository<SkillGroup, Long> {
    List<SkillGroup> findSkillGroupByType(Character type);
    SkillGroup findSkillGroupByName(String name);
    boolean findSkillGroupByNameAndType(String name, Character type);
}

Тест:

@Rollback(value = false)
@SpringBootTest
class SkillGroupRepoTest {
    @Test
    public void findSkillGroupByNameAndType() {
        boolean skillGroup = skillGroupRepo.findSkillGroupByNameAndType("Gebruikersinteractie", 'B');
        System.out.println("skillGroup = " + skillGroup);
        Assertions.assertTrue(skillGroup);
    }
}

Если применимо, класс обслуживания:

@Service
@Transactional
@RequiredArgsConstructor
@AllArgsConstructor
public class SkillGroupService {

    @Autowired
    private SkillGroupRepo skillGroupRepo;

    private SkillGroupMapper skillGroupMapper;

    public void AddSkillGroup(String name, Character type) {
        if (skillGroupRepo.findSkillGroupByNameAndType(name, type)) {
            throw new ResponseStatusException(
                    BAD_REQUEST,
                    "Skill group with name: " + name + " and type: " + type + " already exists.");
        }
        SkillGroup skillGroup = SkillGroup.builder()
                .name(name)
                .type(type)
                .build();
        skillGroupRepo.save(skillGroup);
    }

Сообщение об ошибке:

Hibernate: select skillgroup0_.id as id1_7_, skillgroup0_.name as name2_7_, skillgroup0_.type as type3_7_ from skill_group skillgroup0_ where skillgroup0_.name=? and skillgroup0_.type=?

java.lang.ClassCastException: class hs.leiden.competenceApp.skill_related.skill_groups.SkillGroup cannot be cast to class java.lang.Boolean (hs.leiden.competenceApp.skill_related.skill_groups.SkillGroup is in unnamed module of loader 'app'; java.lang.Boolean is in module java.base of loader 'bootstrap')

at jdk.proxy2/jdk.proxy2.$Proxy99.findSkillGroupByNameAndType(Unknown Source) at hs.leiden.competenceApp.skill_related.skill_groups.SkillGroupRepoTest.findSkillGroupByNameAndType(SkillGroupRepoTest.java:43)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

find… методы возвращают экземпляр найденного типа. В случае вашего SkillGroupRepo он вернет SkillGroup. Если вы хотите вернуть boolean, указывающий, можно ли что-то найти в базе данных, вместо этого вы должны использовать метод exists…:

boolean existsByNameAndType(String name, Character type);

Вы можете узнать больше в разделе Создание запроса справочной документации Spring Data JPA.

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