6
respostas

Tipo de retorno de query incompatível com Collection?

Estou tentando usar o seguinte código para retornar todos os itens de uma entidade (ManyToOne), sendo que uma Tarefa contem muitos ItensTarefa:

@Override
    public List<ItemTarefa> getItensByTarefaId(Long id){
        return em.createQuery("SELECT distinct t.itensTarefa FROM Tarefa t WHERE t.id = :pId", ItemTarefa.class)
                    .setParameter("pId", id)
                    .getResultList();
    }

Mas sempre recebo o erro:

Type specified for TypedQuery [br.com.finiciativas.fseweb.models.produto.ItemTarefa] is incompatible with query return type [interface java.util.Collection]
6 respostas

Oi Gabriel, boa noite! Provavelmente você fez um import incorreto. Dá uma olhada no import de List na sua classe - para funcionar deve ser java.util.List .

Opa opa, olhando para o seu código você está passando uma lista de ITEM TAREFA, e está fazendo o FROM na tabela Tarefa,

Será que não confundiu ai? Passando um argumento errado e fazendo o select em outra tabela, assim vai acusar o erro mesmo, porque são 2 Classes diferentes.

Alisson,

Deve ser isso mesmo cara, maso intuito da query é realmente buscar os ITENS DE TAREFA de uma determinada TAREFA,um item de tarefa é um atributo de um objeto tarefa, como podemos ver em SELECT t.itensTarefa. Existe uma maneira correta de realizar isso?

Thais,

Obrigado pela resposta, a importação esta correta :)

Gabriel tudo tem uma solução kkk, você quer trazer itens da tarefa por uma determinada tarefa?

Você tem a tabela itensTarefa correto, dentro dela deve ter a tarefa(id da tarefa) ?

Se tiver é facil mano, algo assim.

SELECT i FROM ItensTarefa as i JOIN FETCH i.tarefa as t WHERE t.id = :pId

Algo assim, depende de como está relacionado o seu banco de dados irmãozinho

Então,

A relação dessas duas entidades é feita por uma tabela intermediária tarefa_item_tarefa só com as FK dos ids.