Dúvida com HQL

Caros, como determinar, criar, compor,codificar etc esta consulta em HQL?
Desde já agradeço.


SELECT
	atendimento.ID_ATENDIMENTO,
	atendimento.DATA_COLETA,
	atendimento.NUM_ORDEM,

	receptor.ID_RECEPTOR,

	receptor.NOME_RECEPTOR,
	receptor.NOME_HOSPITAL,

	receptor.NUM_DOACAO as NUM_DOACAO_RECEPTOR,
	receptor.TIPO_HEMO,
	receptor.TIPO_SANGUINEO,
	receptor.RH,
	receptor.VOLUME,

	doador.NUM_DOACAO as NUM_DOACAO_DOADOR,
	doador.ID_DOADOR
		
	FROM agets.atendimento atendimento
LEFT OUTER JOIN 
	agets.receptor receptor on receptor.ID_RECEPTOR = atendimento.ID_ATENDIMENTO
RIGHT OUTER JOIN
	agets.doador doador on doador.ID_DOADOR = atendimento.ID_ATENDIMENTO;

Aqui explica como montar HQL/JPQL: JPA Consultas e Dicas

Vlw estou vendo agora.

É interessante fazer com SQLQuery ou não?

[quote=smnj]É interessante fazer com SQLQuery ou não?[/quote]Analise sua necessidade.

Essa sua query funcionaria tranquilamente como HQL.

Certo, farei com HQL, muito obrigado.

Usei uma HQL como recomendou, essa abaixo:

	public List<Atendimento> listarTodosOrdenadosPelasMaisAntigos() {
		Query consulta = session.createQuery("from Atendimento a left join a.receptores right join a.doadores");

		return consulta.list();
	}
}

Fez com que o Hibernate gerasse este SQL:

Hibernate: /* from Atendimento a left join a.receptores right join a.doadores */ select atendiment0_.ID_ATENDIMENTO as ID1_1_0_, receptor2_.ID_RECEPTOR as ID1_2_1_, doador4_.ID_DOADOR as ID1_0_2_, atendiment0_.DATA_COLETA as DATA2_1_0_, atendiment0_.IDENT_AC_IRREGULAR as IDENT3_1_0_, atendiment0_.NUM_ORDEM as NUM4_1_0_, atendiment0_.TESTE_COMPATIBILIDADE as TESTE5_1_0_, receptor2_.DATA_NASCIMENTO as DATA2_2_1_, receptor2_.NOME_HOSPITAL as NOME3_2_1_, receptor2_.NOME_RECEPTOR as NOME4_2_1_, receptor2_.NUM_BOLSA as NUM5_2_1_, receptor2_.NUM_DOACAO as NUM6_2_1_, receptor2_.NUM_PRONTUARIO as NUM7_2_1_, receptor2_.COOMBS_DIRETO as COOMBS8_2_1_, receptor2_.D_FRACO as D9_2_1_, receptor2_.TIPO_HEMO as TIPO10_2_1_, receptor2_.PAI as PAI2_1_, receptor2_.RH as RH2_1_, receptor2_.TIPO_SANGUINEO as TIPO13_2_1_, receptor2_.SEXO as SEXO2_1_, receptor2_.VOLUME as VOLUME2_1_, doador4_.CHAGAS as CHAGAS0_2_, doador4_.DATA_ENTRADA as DATA3_0_2_, doador4_.DESTINO as DESTINO0_2_, doador4_.HEPATITE_B as HEPATITE5_0_2_, doador4_.HEPATITE_C as HEPATITE6_0_2_, doador4_.HIV as HIV0_2_, doador4_.HTLV as HTLV0_2_, doador4_.INICIAIS_DOADOR as INICIAIS9_0_2_, doador4_.NOME_DOADOR as NOME10_0_2_, doador4_.NUM_BOLSA as NUM11_0_2_, doador4_.NUM_DOACAO as NUM12_0_2_, doador4_.OBS as OBS0_2_, doador4_.PRODUTO as PRODUTO0_2_, doador4_.SIFILIS as SIFILIS0_2_, doador4_.TIPO_HEMO as TIPO16_0_2_, doador4_.PAI as PAI0_2_, doador4_.RH as RH0_2_, doador4_.TIPO_SANGUINEO as TIPO19_0_2_, doador4_.VOLUME as VOLUME0_2_ from atendimento atendiment0_ left outer join receptor_atendimento receptores1_ on atendiment0_.ID_ATENDIMENTO=receptores1_.ID_ATENDIMENTO left outer join receptor receptor2_ on receptores1_.ID_RECEPTOR=receptor2_.ID_RECEPTOR right outer join doador_atendimento doadores3_ on atendiment0_.ID_ATENDIMENTO=doadores3_.ID_ATENDIMENTO right outer join doador doador4_ on doadores3_.ID_DOADOR=doador4_.ID_DOADOR

Agora, ao exibir uma dataTable, estou tendo certos erros:

Fev 06, 2013 4:40:31 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException SEVERE: Error Rendering View[/listaTransfusoes.xhtml] java.lang.NumberFormatException: For input string: "dataColeta" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492)

Porquê isso acontece?
E mais importante: Como resolver?

java.lang.NumberFormatException: For input string: “dataColeta”

Algum campo número está recebendo String.

Veja se na tabela está “” ao invés de null.

Realmente é estranho, não tenho nada que seja igual a “”.

[quote=smnj]Realmente é estranho, não tenho nada que seja igual a “”.[/quote] Necessariamente não estará “” mas talvez como espaço vazio, o que é um texto vazio e que me Java seria “”

É, passando o SQL que executaria no Join está acontecendo mesmo isso, vi agora, vou apagar os valores do banco e “repovoar” para ver se o problema persiste.

Hebert, o problema ainda está persistente.

Cheguei a um resultado.
VI teu post sobre a aplicação em Tomcat
Usei isto:

Consegui fazer a consulta, mas ainda não a testei, estou com uma dúvida simples:

for (Atendimento at : hibernateAtendimentoDAO.listarTodosOrdenadosPelasMaisAntigos()) { System.out.println(at.getDataColeta()); System.out.println(at.getNumOrdem()); System.out.println(at.getDoadores()); System.out.println(at.getReceptores());

Como fazer para acessar um atributo da lista de receptores e doadores?

Você cria o relacionamento entre essas classes com one to many ou o mais adequado.

Depois faz apenas algo do tipo pessoa.getCarros()

Já tem algo assim, com isso consegui listar outras coisas, mas o problema está relacionado às listas, a dúvida é como listar:

Tenho isto na entidade Atendimento:

[code] @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = “doador_atendimento”, joinColumns = { @JoinColumn(name = “ID_ATENDIMENTO”) }, inverseJoinColumns = { @JoinColumn(name = “ID_DOADOR”) })
private List<Doador> doadores = new ArrayList<Doador>();

@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "receptor_atendimento", joinColumns = { @JoinColumn(name = "ID_ATENDIMENTO") }, inverseJoinColumns = { @JoinColumn(name = "ID_RECEPTOR") })
private List&lt;Receptor&gt; receptores = new ArrayList&lt;Receptor&gt;();

[/code]

A dúvida é como acessar a lista à partir da entidade Atendimento, usei get e não funcionou.

Consegui, só passar um Index e o atributo:

Perdão pela insistência, mas só uma última pergunta.
Aparentemente com isto não consegui listar os dados relacionado ao nome do receptor:

Como proceder para listar estes dados?