Hibernate - createQuery

1 resposta
R

Ola pessoal
Estou tento problemas no hibernate usando a sequinte query

private static final String listPersonsOfCompany = 
		"select " +
		"	new Person(person.pkPerson, person.name, person.born) " +
		"from " +
		"	Person as person " +
		"		right join person.company as company " +
		"where " +
		"	company.name like( :companyName )";
	
	public List<Person> listPerson(Person entity){
		Session session = getSession();
		Query select = session.createQuery(listPersonsOfCompany);
		select.setString("companyName", entity.getCompany().getName());
		
		List<Person> persons = (List<Person>)select.list();
		
		return persons;
	}

O problema ocorre qunado nao existe registros no banco, por exemplo
like( ‘ibm’ )"; isso funciona normal
like( ‘cicrana’ ); isso nao funciona pois cicrano nao existe no banco de dados e ocorre o seguinte erro ao invez de retornar uma lista vazia

Caused by: javax.faces.el.EvaluationException: org.hibernate.QueryException: could not instantiate: br.com.peopleway.model.persistence.to.Person
	at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:130)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
	... 32 more
Caused by: org.hibernate.QueryException: could not instantiate: br.com.peopleway.model.persistence.to.Person
	at org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:45)
	at org.hibernate.loader.hql.QueryLoader.getResultList(QueryLoader.java:356)
....
Caused by: java.lang.IllegalArgumentException
	at sun.reflect.GeneratedConstructorAccessor52.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

Parece que ocorre um erro pois nao é possivel instancia a classe Person, o que deve ocorrer nessa parte do Query “select new Person(person.pkPerson, person.name, person.born)…”

Acreditava que o hibernate deveria tratar isso, basicamente o que estou tentando fazer é consultar as pessoas de uma determinada empresa.

Desde ja muito obrigado

1 Resposta

L

que tal tentar essa query ? O construtor é chamado pelo Hibernate automaticamente para instanciar objetos :Person que satisfaça a clausula where.

from Person as person right join person.company as company where company.name like (:companyName)

[]s

Criado 12 de fevereiro de 2007
Ultima resposta 12 de fev. de 2007
Respostas 1
Participantes 2