Distinct (View) e Dao O que faço?

Boa noite galera,

Estou precisando muito da ajuda de vocês…

Não estou conseguindo fazer um distinct e mostrar isso na tela…

Dao:




public List<QuebraSigilo> findQuebraSigilos(Date dataInicio, Date dataFim, String numeroComunicacao, String numeroCaso)
	{
		  
		  try {
			  DetachedCriteria criteria = DetachedCriteria.forClass(QuebraSigilo.class, "s")
              		     .createAlias("s.clienteOficio", "d",CriteriaSpecification.INNER_JOIN)
                 	     .createAlias("d.oficio", "e",CriteriaSpecification.INNER_JOIN)
                 	   	 .add(Restrictions.between("e.dataComunicacao", dataInicio,dataFim));
			   	 criteria.setProjection(Projections.distinct(Projections.projectionList(). 
			  			add(Projections.property("e.numeroComunicacao")) 
					    .add(Projections.property("s.caso"))
					   )).setResultTransformer(Transformers.aliasToBean(QuebraSigilo.class)); 
			  			 
			  			
		
			  if(!numeroCaso.equals("") && numeroCaso!=null)
	          {
				criteria.add(Restrictions.eq("s.caso", numeroCaso));
			  }
		           
	          if(!numeroComunicacao.equals("") && numeroComunicacao!=null)
	          {
	             criteria.add(Restrictions.eq("e.numeroComunicacao", numeroComunicacao));
			  }
	             
	              criteria.addOrder(Order.asc("e.numeroComunicacao"));
	                
		         List<QuebraSigilo> list = criteria.getExecutableCriteria(session).setMaxResults(50).list();
	            
	            if(list!=null && list.size()>0)
	            	return list;
	            else
	            	return null;
	            
	        } catch (HibernateException he)
	        {
	            logger.warn(he.getMessage());
	            return null;
	        }
	  }

resultado:

   select
       distinct top 50 e2_.NUMERO_COMUNICACAO as y0_,
       this_.CASO as y1_
   from
       OFICIO_CLIENTE_QUEBRA_SIGILO this_
   inner join
       OFICIO_CLIENTE d1_
           on this_.ID_OFICIO_CLIENTE=d1_.ID_OFICIO_CLIENTE
   inner join
       OFICIO e2_
           on d1_.ID_OFICIO=e2_.ID_OFICIO
   where
       e2_.DATA_COMUNICACAO between ? and ?
   order by
       e2_.NUMERO_COMUNICACAO asc

o Problema: que eu não consigo mostrar na view : e2_.NUMERO_COMUNICACAO

Bean:

[code]

public void pesquisarOficio(ActionEvent ev)
{

	  	if (DateUtil.compareDate(dataInicioP, dataFimP, 2))
		{
           addErrorMessageFromResource("dataInicialSuperiorDataFinal");
           return;
		}
	  	else
	  	{	
	     listaQuebra = quebraSigiloDao.findQuebraSigilos(dataInicioP, dataFimP,numeroOficio,caso);
	    
	    	    
	    	
	    }

}

[quote]

view



<h:panelGroup id="pnlTabela" layout="block" style="width:124%;margin-top:-134%;">
					
					<r:dataTable id="table" var="row" value="#{listaQuebra}" rows="10" 
						width="80%" rowClasses="row-odd,row-even" rowKeyVar="linha">

						<f:facet name="footer">
						    	<r:datascroller id="tblScroller" immediate="true" maxPages="10"
								status="_stsLoad1" reRender="table"/> 
						</f:facet>
						
			
					<r:column style="text-align: center">	
						 <f:facet  name="header">
							 <h:outputText value="#{messages['numero.caso']}" />
						</f:facet>
						<h:outputText value="#{row.clienteOficio.oficio.numeroComunicacao}" />
					</r:column>	
					<r:column style="text-align: center">
							<f:facet name="header">
								<h:outputText value="Contas" />
							</f:facet>
							<a:commandLink styleClass="rich-link" action="#{quebraSigiloBean.consultarConta}">	
							<h:graphicImage value="/img/lupa.gif" alt="#{messages['detalhar']}" 
								style=" margin-right: 10px" styleClass="semBorda"/>
							</a:commandLink>
					</r:column>
					<r:column style="text-align: center">	
						<f:facet name="header">
								<h:outputText value="Arquivo" />
						</f:facet>
							<h:commandLink styleClass="rich-link" action="#{quebraSigiloBean.excluirOrigemDestino}">	
									<h:graphicImage value="/img/arquivo.jpg" alt="#{messages['alterar']}" 
									style=" margin-right: 10px" styleClass="semBorda"/>
							</h:commandLink>
					</r:column>	
										<r:column style="text-align: center">	
							<f:facet name="header">
								<h:outputText value="#{messages['Sinalizacao']}" />
					       </f:facet>
					       <a:commandLink styleClass="rich-link"  reRender="pnlTabela,tableOficio" actionListener="#{quebraSigiloBean.sinalizacao}" immediate="true" >	
		      					<h:graphicImage value="/img/verde.png" alt="#{messages['arquivo_gerado']}" 
									style=" margin-right: 10px"  rendered=""  styleClass="semBorda"/>
							     <h:graphicImage value="/img/vermelho.png" alt="#{messages['arquivo_nao_gerado']}"  
									style=" margin-right: 10px"  rendered=""   styleClass="semBorda"/>
						  </a:commandLink>
							
			 	</r:column>	
									
			</r:dataTable>
       	</h:panelGroup>
		
			</h:form>
		</s:div>
	</ui:define>
</ui:composition>

Onde estou errando?

coloque a sua tela entre as tags também, por favor.

Certo!

nessa linha: <r:dataTable id="table" var="row" value="#{listaQuebra}" rows="10" width="80%" rowClasses="row-odd,row-even" rowKeyVar="linha">

r seria de richfaces? tente fazer assim na propriedade value:<r:dataTable id="table" var="row" value="#{nomeDoMeuManagedBean.listaQuebra}" rows="10" width="80%" rowClasses="row-odd,row-even" rowKeyVar="linha"> E certifique-se de que listaQuebra possui um getter

Perfeito!.. vou fazer isso agora!

[img]

[/img]


[quote=digaoneves]nessa linha: <r:dataTable id="table" var="row" value="#{listaQuebra}" rows="10" width="80%" rowClasses="row-odd,row-even" rowKeyVar="linha">

r seria de richfaces? tente fazer assim na propriedade value:<r:dataTable id="table" var="row" value="#{nomeDoMeuManagedBean.listaQuebra}" rows="10" width="80%" rowClasses="row-odd,row-even" rowKeyVar="linha"> E certifique-se de que listaQuebra possui um getter[/quote]

Não funcionou ficou a mesma coisa!

E esse valor row.clienteOficio.oficio.numeroComunicacao? ele está populado com alguma coisa?

Sua pesquisa aparentemente retorna dados, visto que existe mais de uma linha na tabela, mas não está sendo lançada nenhuma exceção no log do servidor ?

pois é rodrigo…
não está sendo lançado nenhuma exceção na tela…
ai que está o problema…

Na tela não, eu digo no log do servidor.

as vezes quando é lançada uma LazyInicializationException, ou uma NullPointerException, a tela carrega meio que pela metade, como está acontecendo no seu caso.

O que eu faria se fosse você:

  • Verificaria o log do servidor.
  • Colocaria um breakpoint no método que retorna a lista para ver o que é que está vindo, e se os dados que eu quero mostrar na View estão la.
  • Verificaria se todos meus atributos possuem getters, para poderem aparecer na view.

Rodrigo eu acho o problema está no meu método ou dao…

Se eu tirar .setResultTransformer(Transformers.aliasToBean(QuebraSigilo.class));

A minha lista deixa de ser um objeto Quebrasigilo e passar a ser uma lista de string

[quote=digaoneves]Na tela não, eu digo no log do servidor.

as vezes quando é lançada uma LazyInicializationException, ou uma NullPointerException, a tela carrega meio que pela metade, como está acontecendo no seu caso.

O que eu faria se fosse você:

  • Verificaria o log do servidor.
  • Colocaria um breakpoint no método que retorna a lista para ver o que é que está vindo, e se os dados que eu quero mostrar na View estão la.
  • Verificaria se todos meus atributos possuem getters, para poderem aparecer na view.[/quote]

EU estou me referindo ao console mesmo…
Não está dando nenhuma exceção…

E todos tem o método get e set…

vou te dar um exemplo:

se o meu dao for assim:

 try {
			  DetachedCriteria criteria = DetachedCriteria.forClass(QuebraSigilo.class, "s")
              		     .createAlias("s.clienteOficio", "d",CriteriaSpecification.INNER_JOIN)
                 	     .createAlias("d.oficio", "e",CriteriaSpecification.INNER_JOIN)
                 	   	 .add(Restrictions.between("e.dataComunicacao", dataInicio,dataFim));

a lista irá carregar na view

agora se tiver o distinct o bicho não funciona… meu amigo.

bom, até onde eu sei, se a lista foi populada corretamente, tudo deveria funcionar na view, independente de como ela foi carregada.

você chegou a verificar o que está de fato carregado na sua lista ? debugar, etc.

Obs: nunca usei esse aliasToBean, se o problema realmente for ele, não vou poder te ajudar muito, rs.

[quote=digaoneves]bom, até onde eu sei, se a lista foi populada corretamente, tudo deveria funcionar na view, independente de como ela foi carregada.

você chegou a verificar o que está de fato carregado na sua lista ? debugar, etc.

Obs: nunca usei esse aliasToBean, se o problema realmente for ele, não vou poder te ajudar muito, rs.[/quote]

Você já ajudou muito…

eu vou verificar isso…

Tá difícil, filho… Fàcil não! =)

Ainda não consegui!