Обычно я использую критерии для получения имени и списка из хранилища.
Мой конструктор:
public Servidor(String nome, List<VinculoFuncional> vinculosFuncionais) {
super(nome);
this.vinculosFuncionais = vinculosFuncionais;
}
Моя реализация:
@Override
public List<Servidor> buscarServidorPorCpf(Long cpf) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Servidor> query = cb.createQuery(Servidor.class);
Root<Servidor> servidorRoot = query.from(Servidor.class);
List<Predicate> predicates = new ArrayList<>();
if(cpf != null) {
predicates.add(cb.equal(servidorRoot.get("cpf"), cpf));
}
query.multiselect(servidorRoot.get("nome"), servidorRoot.get("vinculosFuncionais"));
query.where(predicates.toArray(new Predicate[0]));
return entityManager.createQuery(query).getResultList();
}
Мой контроллер:
@GetMapping
public List<Servidor> buscarServidor(@RequestParam Long cpf) {
return repository.buscarServidorPorCpf(cpf);
}
Ошибка, которую я получаю:
org.hibernate.hql.internal.ast.QuerySyntaxException: Невозможно найти соответствующий конструктор в классе [br.gov.dataprev .siprev.modelo.servidor.Servidor]. Ожидаемые аргументы: java .lang.String, java .util.Collection [выберите новый br.gov.dataprev.siprev.modelo.servidor.Servidor (генерируетсяAlias0.nome, созданAlias0.vinculosFuncionais) из br.gov.dataprev .siprev.modelo.servidor.Servidor as Генерируемый Алиас0, где генерируемый Алиас0.cpf = 84579030478L]; вложенное исключение: java .lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: невозможно найти соответствующий конструктор в классе [br.gov.dataprev.siprev.modelo.servidor.Servidor]. Ожидаемые аргументы: java .lang.String, java .util.Collection [выберите новый br.gov.dataprev.siprev.modelo.servidor.Servidor (генерируетсяAlias0.nome, созданAlias0.vinculosFuncionais) из br.gov.dataprev .siprev. класс [br.gov.dataprev.siprev.modelo.servidor.Servidor]. Ожидаемые аргументы: java .lang.String, java .util.Collection [выберите новый br.gov.dataprev.siprev.modelo.servidor.Servidor (generateAlias0.nome, генерируется Alas0.vinculosFuncionais) из br.gov.dataprev .siprev.modelo.servidor.Servidor as Генерируемый Алиас0, где генерируемый Алиас0.cpf = 84579030478L]; вложенное исключение: java .lang.IllegalArgumentException: