Erro consulta jpql utilizando o operador NEW [RESOLVIDO]

8 respostas
S
Boa noite! estou tentando fazer uma consulta com jpa, pórem está dando um erro que não consigo resolver. Já procurei uma solução no google e no fórum e não achei. Segue:
public class LoginDaoImpl extends GenericaDaoImpl<Login> implements LoginDao {

	@Override
	public List<Login> listaLo() {
		List<Login> logins = new ArrayList<Login>();
		Query query = em.createQuery("select new modelo.PesquisaAutenticacao(l.usuario, c) from Login l inner join fetch l.clientes c where id = 1");
		
		
		
		List<PesquisaAutenticacao> resultados = query.getResultList();
		
		for(PesquisaAutenticacao result : resultados){
				System.out.println(result.getUsuario());
		}
		
		
		
		return resultados;
	}

}
public class PesquisaAutenticacao {
	
	private String usuario;
	private List<Cliente> clientes;
	
	public PesquisaAutenticacao(String usuario, List<Cliente> clientes) {
		super();
		
		this.usuario = usuario;
		this.clientes = clientes;
	}
	
	
	/*getters e setters*/	
	
}
@Entity
public class Login implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	private String usuario;
	private String senha;

	@OneToOne
	private Funcionario funcionario;

	@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},targetEntity=Cliente.class)
	@JoinTable(name="log_cli", joinColumns=@JoinColumn(name="id_login"),inverseJoinColumns=@JoinColumn(name="id_cliente") )
	public List<Cliente> clientes;
	
	
	/*getters e setters*/

}
@Entity
public class Cliente implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;

	@Column(length = 255)
	private String nome;

	@Column(length = 255)
	private String razaoSocial;

	@Column(length = 14)
	private String cnpj;

	@Column(length = 11)
	private String cpf;


	@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy="clientes",targetEntity=Login.class)
	public List<Login> logins;
	/*getters e setters*/	
	
}
Erro:
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [modelo.PesquisaAutenticacao] [select new modelo.PesquisaAutenticacao(l.usuario, c) from br.com.isis.doc.dominio.Login l inner join fetch l.clientes c where id = 1]
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1202)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:275)
	at br.com.isis.doc.dao.hibernate.LoginDaoImpl.listaLo(LoginDaoImpl.java:20)
	at test.Main.main(Main.java:20)
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [modelo.PesquisaAutenticacao] [select new modelo.PesquisaAutenticacao(l.usuario, c) from br.com.isis.doc.dominio.Login l inner join fetch l.clientes c where id = 1]
	at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
	at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
	at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:272)
	... 2 more
Deste já agradeço se alguém me ajudar.

8 Respostas

Anime

Oi,

Nunca usei hibernate, mas a mensagem diz que não consegue encontrar o construtor da classe…

davidbuzatto

Vc tem erros de sintaxe na sua query.
O que você quer retornar? PesquisaAutenticacao é um bean configurado na sua unidade de persistência?
Fica difícil corrigir sua query sem entender seu problema.

A

cara,

acho que vai funcionar, so se sua classe PesquisaAutenticacao ficar assim

public class PesquisaAutenticacao {  
      
    private String usuario;  
    private Cliente cliente;  
      
    public PesquisaAutenticacao(String usuario, Cliente cliente) {    
        this.usuario = usuario;  
        this.cliente = cliente;  
    }  
      
      
    /*getters e setters*/     
      
}

Pq vc nao usa sua Classe Login msm?

t+

S

davidbuzatto:
Vc tem erros de sintaxe na sua query.
O que você quer retornar? PesquisaAutenticacao é um bean configurado na sua unidade de persistência?
Fica difícil corrigir sua query sem entender seu problema.

Bem desejo carregar nome e cnpj dos Clientes quando efetuar o login, porem eu não estou conseguindo carregar os atributos da collection cliente.
Algo como o exemplo abaixo, porém carregando um objeto.

A

cara,

pq vc não usa a sua entidade Login msm?

Se vc usar o construtor que eu te passei, com aquela query, vai funcionar a sua consulta, nao sei se vai ser do jeito que vc queria.

t+

S

alissonvla:
cara,

pq vc não usa a sua entidade Login msm?

Se vc usar o construtor que eu te passei, com aquela query, vai funcionar a sua consulta, nao sei se vai ser do jeito que vc queria.

t+


Cara obrigado! funcionou do jeito que eu queria.

A

boa… :lol:

marque o post como resolvido.

t+

S

“”

Criado 28 de outubro de 2011
Ultima resposta 29 de out. de 2011
Respostas 8
Participantes 4