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

7 respostas
T

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+

7 Respostas

F

tiagogn,

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

M

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.

T

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.

T

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 ?

M

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.

T

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

Obrigado!

Ate+

P

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

Criado 14 de maio de 2007
Ultima resposta 14 de mai. de 2007
Respostas 7
Participantes 4