Hibernate: Retorno de query.list(), com 2 Objetos em from

E ae galera…to com um probleminha:

Estou fazendo um consulta usando HQL, desse tipo: eu tenho um Objeto Pai e outro objeto Filho, o Pai tem uma lista de filhos, na query eu estou fazendo o seguinte:

from Pai p, Filho f, where f.paiId = p.id........

até ai tudo blz, a query é gerada e os objetos são trazidos, porem qdo vou pegar o retorno de query.list() ele não esta me retornando uma lista do tipo Pai, ele retorna um Object, e ja ate tentei fazer o Cast, mas não rola…alguem sabe o q pode ser ?

Valeu e ate+

tiagogn,

Poste um pedaço do código para darmos uma olhada.

Você pode pegar por array de Object, mas neste seu caso, acredito que o caminho adotado não é o ideal, você deve ter no Pai um Set de Filho, assim na sua select você só vai trazer o Pai, e nele, ai sim, acessar a lista de Filhos.

o codigo é assim:

....
String sqlQuery = "from Pai p, Filho f where f.paiId = p.id.......demais condições! ";
		
Query query = getSession().createQuery( sqlQuery );
				
return query.list();

q query funciona blz, traz os registros certos, eu vejo isso pelo log do hibernate e pela query gerada, porem esse retorno query.list() não me traz uma lista de objetos do tipo Pai.

isso mesmo Mauro, porem dentro da minha clausa where tenho algumas condições impostas sobre a classe filho, por isso ela tb esta no select…e sobre esse Array de objects, teria como transforma-lo na classe Pai ?

Imagine o seguinte

você tem Estado e Cidade

@Entity
public class Estados {
	
	@Id
	@Column(name="uf", length=2,columnDefinition="varchar(2)")
	private String uf;
	
	@Column(name="descricao", length=30,columnDefinition="varchar(30)")
	private String descricao;
	
	@OneToMany(mappedBy="estado")
   	private Set<Cidades> cidades;
@Entity
public class Cidades {
	
	@Id
	@Column(name="codigo", length=3,columnDefinition="int")
	private Integer codigo;
	
	@Column(name="descricao", length=40,columnDefinition="varchar(40)")
	private String descricao;
	
	@ManyToOne	@JoinColumn(name="uf")
	private Estados estado;

E você quer buscar todos os estados, cuja as cidades iniciem com P

StringBuffer sql = new StringBuffer();
sql.append("SELECT e FROM Estados e ");
sql.append("WHERE e.cidades.descricao LIKE 'P%' ");
Query q = getSession().createQuery(sql.toString());
List<Estados> list = q.list();

Viu como no WHERE eu referenciei a outra tabela sem precisar colocar ela no SELECT ? Desta forma, você vai ter um List do Objeto Pai, e se quiser acessar a lista de Filhos, é só ir pelo Pai.

Mauro…valeu cara brigadão, era isso mesmo funcionou aqui perfeito.

Obrigado!

Ate+

Tiago, da primeira maneira que voce fez, ele devolve uma lista de array de Object, sendo que na posicao 0 tem Pai e na posicao 1 tem Filho

Mas nesse caso a solucao do Mauro se adequa bem melhor