javasf@googlegroups.com
[Top] [All Lists]

Re: [javasf] SelectOneMenu com Mapeamento LAZY

Subject: Re: [javasf] SelectOneMenu com Mapeamento LAZY
From: "Altieres de Matos"
Date: Thu, 10 Mar 2011 13:38:46 -0300
Rafael,
 
equals e hashCode do Transportador:
 
@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Transportador other = (Transportador) obj;
    if (this.idTransportador != other.idTransportador && (this.idTransportador == null || !this.idTransportador.equals(other.idTransportador))) {
        return false;
    }
    return true;
}
 
@Override
public int hashCode() {
    int hash = 5;
    hash = 47 * hash + (this.idTransportador != null ? this.idTransportador.hashCode() : 0);
    return hash;
}
 
equals e hashCode do Municipio:
 
@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Municipio other = (Municipio) obj;
        if (this.idMunicipio != other.idMunicipio && (this.idMunicipio == null || !this.idMunicipio.equals(other.idMunicipio))) {
            return false;
        }
        return true;
    }
 
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (this.idMunicipio != null ? this.idMunicipio.hashCode() : 0);
        return hash;
    }
 
equals e hashCode do Uf:
 
@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Uf other = (Uf) obj;
        if (this.idUf != other.idUf && (this.idUf == null || !this.idUf.equals(other.idUf))) {
            return false;
        }
        return true;
    }
 
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 89 * hash + (this.idUf != null ? this.idUf.hashCode() : 0);
        return hash;
    }
 
Quando eu implemento o equals e hashCode de forma incorreta ele não popula o selectOneMenu nem com mapeamento EAGER, passei por isso dias atrás.
 
O Converter quando uso o EAGER funciona normalmente, o problema é quando uso LAZY, o converter receber valores NULL.
 
Converter Municipio:
 
@Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && !value.equals("")) { //QUANDO ELE É LAZY ELE NÃO PASSA DESSA CONDIÇÃO
            MunicipioService municipioService = (MunicipioService) FacesContextUtils.getWebApplicationContext(context).getBean("municipioService");
            return municipioService.getById(Long.valueOf(value), TipoConsultaById.MUNICIPIO);
        }
        return null;
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value instanceof Municipio) {
            Municipio municipio = (Municipio) value;
            return String.valueOf(municipio.getIdMunicipio());
        }
        return "";
    }
 
Converter Uf:
 
@Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value != null && !value.equals("")) {
            MunicipioService municipioService = (MunicipioService) FacesContextUtils.getWebApplicationContext(context).getBean("municipioService");
            return municipioService.getById(Long.valueOf(value), TipoConsultaById.UF);
        }
        return null;
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value instanceof Uf) {
            Uf uf = (Uf) value;
            return String.valueOf(uf.getIdUf());
        }
        return "";
    }
 
O que mais pode ser?

Att Altieres de Matos
4º Ano de Sistemas de Informação - UNIPAR - Paranavaí
Analista de Sistemas - D.S. GOES & CIA LTDA
Cel.: (44) 9903-3987 / (44) 9931-8326
E-mail/MSN:
altitdb@xxxxxxxxxxx
 
Sent: Thursday, March 10, 2011 1:18 PM
Subject: Re: [javasf] SelectOneMenu com Mapeamento LAZY
 
Aparentemente está faltando o converter e provavelmente a implementação correta dos métodos equals e hashCode.

2011/3/10 Altieres de Matos <altitdb@xxxxxxxxx>
Então Adelson,
 
faço essa chamada sim, quando debugo vejo que tenho o objeto Uf e Municipio só que não vejo os dados dele, como xMun, cMun entende?
Só que se eu fizer um System.out.println(transportador.getMunicipio().getxMun()) ele imprime o nome do municipio corretamente.
Olhei tambem no log do glassfish, e vi que ele realiza as consultas conforme o LAZY especifica.

Att Altieres de Matos
4º Ano de Sistemas de Informação - UNIPAR - Paranavaí
Analista de Sistemas - D.S. GOES & CIA LTDA
Cel.: (44) 9903-3987 / (44) 9931-8326
E-mail/MSN: altitdb@xxxxxxxxxxx
 
 
Sent: Thursday, March 10, 2011 8:15 AM
Subject: Re: [javasf] SelectOneMenu com Mapeamento LAZY
 
Olá Altieres,

estranho.... antes de chamar o form de editar é executado o método editar do managedBean certo? e esse método faz  esse trecho de códgo:
uf = transportador.getMunicipio().getUf();

Teoricamente ele já está acessando o atributo lazy município e, se eu não estou enganado, não deveria dar esse problema... a menos que esteja acontecendo um erro nessa linha de código, você verificou se não está acontecendo algum erro aí?


Em 10 de março de 2011 03:51, Altieres de Matos <altitdb@xxxxxxxxx> escreveu:
Bom galera,
 
estou com o seguinte problema.
 
Tenho uma classe Transportador com o Municipio e UF mapeado como LAZY, porem quando vou editar este transportador ele renderiza a view mais não seleciona o Municipio, antes de renderizar a view eu preencho o selectOneMenu com os Municipios e Uf.
Estou usando JSF2, Primefaces 2.2.1, Mojarra 2.0.4 e Spring.
 
Se eu colocar EAGER no mapeamento funciona corretamente, já debuguei, fiz diversos testes e nada.
 
Seguem as classes:
 
@Entity
@Table(name = "MUNICIPIO")
public class Municipio implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idMunicipio;   
    private String cMun;
    private String xMun;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDUF")
    private Uf uf;
//getters, setters, hashCode and equals omitidos
}
 
@Entity
@Table(name = "TRANSPORTADOR")
public class Transportador implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idTransportador;
    private String xNome;
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "IDMUNICIPIO")
    private Municipio municipio;
//getters, setters, hashCode and equals omitidos
}
 
A view:
 
<h:outputLabel value="ESTADO:" title="Estado"/>                            
     <h:selectOneMenu id="uf" value="#{transportadorBean.uf}" title="Selecione um Estado" style="width: 15.5em" required="true">
     <f:selectItem itemLabel="SELECIONE" />
     <f:selectItems value="#{transportadorBean.ufs}" var="a" itemValue="#{a}" itemLabel="#{a.xUf}" />
     <f:converter converterId="converterUf" />
     <f:ajax render="municipio" event="change" listener="#{transportadorBean.listaMunicipios}" />
     </h:selectOneMenu>
<h:outputLabel value="MUNICÍPIO:" />
     <h:selectOneMenu id="municipio" value="#{transportadorBean.transportador.municipio}" style="width: 15.5em” required="true" title="Selecione um município">
     <f:selectItem itemLabel="SELECIONE" itemValue="" />
     <f:selectItems value="#{transportadorBean.municipios}" var="b" itemValue="#{b}" itemLabel="#{b.xMun}" />
     <f:converter converterId="converterMunicipio" />
     </h:selectOneMenu>
 
ManagedBean:
//Inject, etc
TransportadorService transportadorService;
Transportador transportador;
List<Uf> ufs;
List<Municipios> municipios;
Uf uf;
 
public String editar() {
    transportador = transportadorService.getById(transportador.getIdTransportador());
    ufs = municipioService.consultarUfsBrasil();
    uf = transportador.getMunicipio().getUf();
    municipios = municipioService.consultarMunicipios(uf);
    return "transportadorForm";
}
 
Bom por enquanto é só.
 
Fico a disposição para sugestões.
 
Obrigado.

Att Altieres de Matos
4º Ano de Sistemas de Informação - UNIPAR - Paranavaí
Analista de Sistemas - D.S. GOES & CIA LTDA
Cel.: (44) 9903-3987 / (44) 9931-8326
E-mail/MSN: altitdb@xxxxxxxxxxx
 
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Rafael Ponte
http://www.rponte.com.br

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil
<Prev in Thread] Current Thread [Next in Thread>