JPA Error [Ajuda - please]

Gente, alguem ja viu esse erro antes? Quando eu tento pegar o nome do funcionario acontece um erro. mas quando eu pego so o objeto ( f ). Quando eu faço ( f.nome ). da erro.

Podem me ajudar?

[code]

public class Main {

public static void main(String[] args){    
	
	EntityManagerFactory entityFactory = Persistence.createEntityManagerFactory("projtcc");
	EntityManager entityManager = entityFactory.createEntityManager();
	entityManager.getTransaction().begin();
	
	
	TypedQuery<Funcionario> query = entityManager.createQuery("SELECT f.nome FROM Funcionario f where f.posicao.nomePosicao='Analista 1'", Funcionario.class);
	System.out.println(query.getResultList());

entityManager.close();
entityFactory.close();

}

}[/code]

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread “main” java.lang.IllegalArgumentException: Type specified for TypedQuery [modelo.Funcionario] is incompatible with query return type [class java.lang.String]
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:286)
at CRUD.Main.main(Main.java:33)

Olá.
O problema é que vc declarou que vai receber um objeto do tipo Funcionario,mas a consulta está te retornando uma String.

Blz, mas como eu resolvo isso? eu tentei tirar o <Funcionario> mas obtive o mesmo erro. Pode me ajudar a resolver isso brother? Obrigado pela atencao!

Subistitua seu TypedQuery por TypedQuery.

Ja tentei, mas isso nao funciona.

Colega, NÃO é má prática fazer:

TypedQuery<Funcionario> funcionario = entityManager.createQuery("SELECT f FROM Funcionario f where f.posicao.nomePosicao='Analista 1'", Funcionario.class);   

Retorne o objeto funcionário inteiro e depois acesse o atributo que desejar. Só que no lugar de query, crie uma namedQuery, porque esta é compilada e testada assim que o EntityManagerFactory é criado.

Abraço

Poderia, por favor, me dar um exemplo de como se faz isso? Estou com dificuldades. Obrigado.

Estou usando o seu exemplo com query. Mudar para namedQuery é fácil, só dar uma lida em um desses livros de hibernate que tem na Internet.

public class Main {   
  
    public static void main(String[] args){       
           
        EntityManagerFactory entityFactory = Persistence.createEntityManagerFactory("projtcc");   
        EntityManager entityManager = entityFactory.createEntityManager();   
        entityManager.getTransaction().begin();   
           
           
// a mudança é aqui: você retorna uma lista de funcionários, e não uma lista de string apenas com o nome.
        TypedQuery<Funcionario> query = entityManager.createQuery("SELECT f FROM Funcionario f where f.posicao.nomePosicao='Analista 1'", Funcionario.class);   
        List<Funcionario> funcionarios = query.getResultList();
        for(Funcionario funcionario : funcionarios) {
            System.out.println(funcionario.getNome());
        }  
           
entityManager.close();   
entityFactory.close();   
  
           
    }   
}  

Só fique esperto com o seguinte: hibernate tem problema com o uso de TypedQuery<?> quando você faz projeções. Nem mesmo a versão 3.6 resolve este problema, mas parece que uma solução já foi proposta para a versão 3.6.1.

Pow brother, muito obrigado! Assim que chegar em casa eu tentarei seu codigo. Depois eu deixo uma resposta aqui sobre o que aconteceu. Obrigado a todos pela atenção!

resolveu?

Brother… acredito que sim… esse topico é de 2011… sinceramente não lembro muito bem…