Я заметил, что когда у других возникает эта проблема, это происходит потому, что они пытаются приводить объекты. Я не пытаюсь бросать. Кроме того, я пытаюсь спросить, существует ли объект в таблице данных, используя репозиторий 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)
find…
методы возвращают экземпляр найденного типа. В случае вашего SkillGroupRepo
он вернет SkillGroup
. Если вы хотите вернуть boolean
, указывающий, можно ли что-то найти в базе данных, вместо этого вы должны использовать метод exists…
:
boolean existsByNameAndType(String name, Character type);
Вы можете узнать больше в разделе Создание запроса справочной документации Spring Data JPA.