[RESOLVIDO]Jsf - problema removendo item de um ArrayList

19 respostas
K

Help-me Galera!

Tenho um dataTable onde adiciono os contatos da pessoa numa lista… até ai blz

com a lista preenchida, quando clico no botão excluir, ao invés de remover o item desejado ele remove o que está acima dele :?:

não entendo o que tá acontecendo… :?: já debuguei e tudo, ele leva o objeto certo no método mas na hora que ele dá o remove deleta o Objeto errado!

o método que recebe o evento para remover

//Deleta um contato adicionado na Lista(Altera o status para excluido)
	public void alterarStatusParaExcluido(EventoContato contato) throws Exception{
		 
		if(contato.getId() == null){
			 listaContatosPessoa.remove(contato);
		 }else{
			try {
				 contato.setSituacaoEvento(situacaoEventoServico.buscarPorId(SituacaoEvento.COD_EXCLUIDO));
				 contatoServico.atualizar(contato);
				 listaContatosPessoa.remove(contato);
				 enviarMensagemInfo("excluisaoEvento", getMensagem("EVENTO.REGISTRO_EXCLUIDO_SUCESSO"));
			} catch (Exception e) {
				sessaoAtiva.getErrosSirf3().setException(e);
	    		throw e;
			}
			 
		 }
	}

aqui meu dataTable com o botão excluir

<a4j:outputPanel id="panelTabelaContatos">
						<rich:dataTable onRowMouseOver="this.style.backgroundColor='#C5DCC5'"
			               				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
										id="tbContato" width="450px" border="0" cellpadding="0" var="c"
										value="#{contatoControle.contatosPessoa}" >
										
										<f:facet name="header">
											<rich:columnGroup>
												<h:column>
													<h:outputText value="Tipo Contato"></h:outputText>
												</h:column>
												<h:column>
													<h:outputText value="Contato"></h:outputText>
												</h:column>
												<h:column>
													<h:outputText value="Excluir"></h:outputText>
												</h:column>
												<h:column>
													<h:outputText value="Editar"></h:outputText>
												</h:column>
											</rich:columnGroup>
										</f:facet>
										<h:column>
											<h:outputText value="#{c.tipoContato.descricao}" />
										</h:column>
										<h:column>
											<h:outputText value="#{c.valor}"></h:outputText>
										</h:column>
										<h:column>
											<a4j:commandButton value="Excluir"
														   	   action="#{contatoControle.alterarStatusParaExcluido(c)}"
												               reRender="tbContato"/>
										</h:column>
										<h:column>
											<a4j:commandButton value="Alterar"  action="#{contatoControle.alterarStatusParaAlterado(c)}" reRender="gridContato">
											</a4j:commandButton>
										</h:column>
	
									</rich:dataTable>	
									
								</a4j:outputPanel>

Obrigado desde já!!

19 Respostas

F

Olá kelvis…

Uma vez aconteceu isso comigo era porque eu não tinha implementado corretamente os metodos “equals e hash”.

Talvez possa ser isso que esteja acontecendo com você.

T+
Filipe.

K

Pois éh cara… vou dar uma conferida aqui no meu Bean pra ver como é que tá o equals e hash code…
Depois posto se Deu certo!

Vlw

E

Provavelmente ocorra esse problema para você quando você não tem o contato ainda cadastrado na base, então ele ainda não tem um ID. Se for um formulário de inserção aqui eu adiciono um ID sequencial e removo antes de gravar já que é auto-incremento.

K

Então senhores… o problema era no equals e hashcode mesmo que não estava implementado de forma correta… eu não estava passando o ID…
Agora tá funfando!!

obrigado pela ajuda!!

G

Olá kelvis !

Estou começando com java e também estou tento esse problema tem como vc postar a implementação desses metodos.

Obrigado!

K

gilmar_rj:
Olá kelvis !

Estou começando com java e também estou tento esse problema tem como vc postar a implementação desses metodos.

Obrigado!

Seguinte… vai no teu Objeto (Bean), clica com o botão direito do mouse e vai na seguinte opção SOURCE–>Generate hashCode() and equals(), daí vai abrir uma caixa de diálogo com as propriedas do teu Objeto você marca somente o ID e pronto… no fim da classe ele vai gerar os métodos automaticamente!

Exemplo da minha Classe de entidade TipoContato

@Id
	@Column(name = "CODIGO", nullable = false)
	private Long codigo;

@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		TipoContato other = (TipoContato) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		return true;
	}
G

Eu tenho uma duvida!

Tenho uma que se chama Boletim e outra ItemBoletim onde ela se relacionam até ai tudo bem, quando eu adiciona meus itens na lista não estou sabendo remover um determionado item passado por parametro da lista uma vez que o id esta como null pois ele esta com a anotação @id e @GeneratedValue.

Eu vi no seu post o uso no equals e do haschCode mas não estou sabendo implementar isso.

Eu tenhum metodo no meu BoletimMB que tenta fazer isso ou seja eu percorre minha lista e tento achar aquele determinado item que passo por paramentro.

segue meu codigo.

package br.com.estub.boletim.modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.validation.Valid;

@Entity
public class Boletim implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private Long id;

	@Column(nullable = false, length = 10)
	private String codigo;

	@ManyToOne(cascade = CascadeType.PERSIST)
	private Contrato contrato;

	@OneToMany(cascade = {CascadeType.PERSIST,CascadeType.REMOVE},  mappedBy = "boletim")
	private List<ItemBoletim> itens = new ArrayList<ItemBoletim>();

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public List<ItemBoletim> getItens() {
		return itens;
	}

	public void setItens(List<ItemBoletim> itens) {
		this.itens = itens;
	}

	public Contrato getContrato() {
		return contrato;
	}

	public void setContrato(Contrato contrato) {
		this.contrato = contrato;
	}

}
package br.com.estub.boletim.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class ItemBoletim implements Serializable {

	@Id
	@GeneratedValue
	private Long id;

	@Column(nullable = false)
	@Temporal(TemporalType.DATE)
	private Calendar data = Calendar.getInstance();

	private BigDecimal frete;

	private BigDecimal custoDeslocamento;

	private BigDecimal maoDeObraTercerizada;

	private BigDecimal refeicao;

	private BigDecimal hospedagem;

	private BigDecimal documentacao;

	private BigDecimal outrasDespesas;

	@ManyToOne
	private Boletim boletim;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Calendar getData() {
		return data;
	}

	public void setData(Calendar data) {
		this.data = data;
	}

	public BigDecimal getFrete() {
		return frete;
	}

	public void setFrete(BigDecimal frete) {
		this.frete = frete;
	}

	public BigDecimal getCustoDeslocamento() {
		return custoDeslocamento;
	}

	public void setCustoDeslocamento(BigDecimal custoDeslocamento) {
		this.custoDeslocamento = custoDeslocamento;
	}

	public BigDecimal getMaoDeObraTercerizada() {
		return maoDeObraTercerizada;
	}

	public void setMaoDeObraTercerizada(BigDecimal maoDeObraTercerizada) {
		this.maoDeObraTercerizada = maoDeObraTercerizada;
	}

	public BigDecimal getRefeicao() {
		return refeicao;
	}

	public void setRefeicao(BigDecimal refeicao) {
		this.refeicao = refeicao;
	}

	public BigDecimal getHospedagem() {
		return hospedagem;
	}

	public void setHospedagem(BigDecimal hospedagem) {
		this.hospedagem = hospedagem;
	}

	public BigDecimal getDocumentacao() {
		return documentacao;
	}

	public void setDocumentacao(BigDecimal documentacao) {
		this.documentacao = documentacao;
	}

	public BigDecimal getOutrasDespesas() {
		return outrasDespesas;
	}

	public void setOutrasDespesas(BigDecimal outrasDespesas) {
		this.outrasDespesas = outrasDespesas;
	}

	public Boletim getBoletim() {
		return boletim;
	}

	public void setBoletim(Boletim boletim) {
		this.boletim = boletim;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ItemBoletim other = (ItemBoletim) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	

}
package br.com.estub.boletim.mb;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.hibernate.cache.ReadWriteCache.Item;

import br.com.estub.boletim.modelo.Boletim;
import br.com.estub.boletim.modelo.Contrato;
import br.com.estub.boletim.modelo.ItemBoletim;
import br.com.estub.boletim.service.BoletimService;
import br.com.estub.boletim.util.JSFUtil;

@ManagedBean(name = "boletimMB")
@ViewScoped
public class BoletimMB implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty("#{boletimService}")
	private BoletimService modelo;

	private Boletim boletim = new Boletim();
	private List<Boletim> boletins = null;
	private ItemBoletim item = new ItemBoletim();
	private Contrato contrato = new Contrato();

	public BoletimService getModelo() {
		return modelo;
	}

	public void setModelo(BoletimService modelo) {
		this.modelo = modelo;
	}

	public Boletim getBoletim() {
		return boletim;
	}

	public void setBoletim(Boletim boletim) {
		this.boletim = boletim;
	}

	public List<Boletim> getBoletins() {

		if (this.boletins == null) {
			this.boletins = modelo.listaTodos();
		}
		return this.boletins;
	}

	public void setBoletins(List<Boletim> boletins) {
		this.boletins = boletins;
	}

	public ItemBoletim getItem() {
		return item;
	}

	public void setItem(ItemBoletim item) {
		this.item = item;
	}

	public Contrato getContrato() {
		return contrato;
	}

	public void setContrato(Contrato contrato) {
		this.contrato = contrato;
	}

	public String acaoSalvar() {
		System.out.println("*****SALVANDO BOLETIM*****");
		this.boletim.setContrato(contrato);
		this.modelo.salvar(this.boletim);

		this.setBoletim(new Boletim());

		return "boletimListar.xhtml";
	}

	public void alterar() {

		this.modelo.altera(boletim);
	}

	public void guardaItem() {

		this.item.setBoletim(boletim);
		this.boletim.getItens().add(this.item);

		this.item = new ItemBoletim();

	}

	public void acaoExcluirItem() {

		System.out.println("*******EXLUINDO ITEM DA LISTA******");

		ItemBoletim objetoDaLista = buscaItemNaLista();
		this.boletim.getItens().remove(objetoDaLista);

	}

	/*
	 * Percorre a lista de itens que se encontra no boletim e compara com o id
	 * do item passado pela requisição, logo em seguida o objeto é apagado.
	 */
	private ItemBoletim buscaItemNaLista() {
		// pega os dados da requisição
		Long id = JSFUtil.getParametroLong("itemId");
		
		ItemBoletim uu = this.boletim.getItens().get(id);
		for (ItemBoletim tt : this.boletim.getItens().get(id)) {

			if (tt.getId() == id) {
				ItemBoletim objetoDaLista = tt;
				return objetoDaLista;
			}
		}
		return null;
	}

	public String acaoExcluir() {

		System.out.println("***EXCLUINDO BOLETIM***");
		Long id = JSFUtil.getParametroLong("boletimId");
		Boletim objetoDoBanco = this.modelo.getBuscaPorId(id);
		this.modelo.remover(objetoDoBanco);
		this.boletins = null;

		return "boletimListar";
	}

	public String acaoAbrirAlteracao() {

		Long id = JSFUtil.getParametroLong("boletimId");
		Boletim objetoDoBanco = this.modelo.getBuscaPorId(id);
		this.setBoletim(objetoDoBanco);

		return "boletim";
	}

	public void limpaFormulario() {

		this.setBoletim(new Boletim());
		this.setContrato(new Contrato());
		this.setItem(new ItemBoletim());
	}

}
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.prime.com.tr/ui">

<ui:composition template="_templete.xhtml">

	<ui:define name="titulo">Cadastra Boletim de Caixa</ui:define>
	<ui:define name="conteudo">

		<h2></h2>

		<h:form id="formulario">
			<h:panelGrid columns="2">


				<h:outputLabel value="Contrato:* " for="contrato" />
				<p:inputMask id="contrato" value="#{boletimMB.contrato.codigo}"
					mask="a*-99/9999" required="true" label="Campo Contrato" />


				<h:outputLabel value="Boletim:* " for="boletim" />
				<p:inputText id="boletim" value="#{boletimMB.boletim.codigo}"
					required="true" label="Campo Boletim" />

			</h:panelGrid>

			<h:form id="formItem">
				<p:fieldset legend="Itens do Boletim" toggleable="true">
					<h:panelGrid columns="4">

						<h:outputLabel value="Data:* " for="data" />
						<p:calendar pattern="dd/MM/yyyy" mode="popup" showOn="button"
							id="data" required="true" label="Campo Data"
							value="#{boletimMB.item.data.time}">
							<f:convertDateTime pattern="dd/MM/yyyy" />
						</p:calendar>



						<h:outputLabel value="Frete: " for="frete" />
						<p:inputText id="frete" value="#{boletimMB.item.frete}" />

						<h:outputLabel value="Custo de Deslocamento: " for="cust" />
						<p:inputText id="cust" value="#{boletimMB.item.custoDeslocamento}" />

						<h:outputLabel value="Mão de Obra Tercerizada: " for="maoDeObra" />
						<p:inputText id="maoDeObra"
							value="#{boletimMB.item.maoDeObraTercerizada}" />

						<h:outputLabel value="Refeição: " for="ref" />
						<p:inputText id="ref" value="#{boletimMB.item.refeicao}" />

						<h:outputLabel value="Hospedagem: " for="hosp" />
						<p:inputText id="hosp" value="#{boletimMB.item.hospedagem}" />

						<h:outputLabel value="Documentação: " for="doc" />
						<p:inputText id="doc" value="#{boletimMB.item.documentacao}" />

						<h:outputLabel value="Outras Despesas: " for="outras" />
						<p:inputText id="outras" value="#{boletimMB.item.outrasDespesas}" />

						<f:facet name="footer">
							<h:panelGroup layout="block" style="text-align: center">
								<p:commandButton ajax="false" action="#{boletimMB.guardaItem}"
									id="btnIncluir" value="Guarda Item"></p:commandButton>
							</h:panelGroup>
						</f:facet>

					</h:panelGrid>
				</p:fieldset>



				<p:dataTable id="listar" var="item"
					value="#{boletimMB.boletim.itens}" widgetVar="carsTable"
					paginator="true" rows="3" rowsPerPageTemplate="5,10,15"
					selectionMode="single">

					<f:facet name="header">
				Itens Boletim
			</f:facet>
					<p:column>
						<f:facet name="header">Data</f:facet>
						<h:outputText value="#{item.data.time}"></h:outputText>

					</p:column>
					<p:column headerText="Frete">
						<h:outputText value="#{item.frete}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>

					<p:column headerText="Custo de Deslocamento">
						<h:outputText value="#{item.custoDeslocamento}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>


					<p:column headerText="Mão de Obra Tercerizada">
						<h:outputText value="#{item.maoDeObraTercerizada}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>


					<p:column headerText="refeicao">
						<h:outputText value="#{item.refeicao}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>

					<p:column headerText="Hospedagem">
						<h:outputText value="#{item.hospedagem}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>

					<p:column headerText="Documentação">
						<h:outputText value="#{item.documentacao}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>

					<p:column headerText="Outras Despesas">
						<h:outputText value="#{item.outrasDespesas}">
							<f:convertNumber type="currency" currencySymbol="R$ "
								locale="pt_BR"></f:convertNumber>
						</h:outputText>
					</p:column>


					<p:column>
						<f:facet name="header">
							<h:outputText value="Ações" />
						</f:facet>
						<h:panelGroup>
							
							<p:commandButton type="button" value="Excluir"
								onclick="conf#{item.id}.show()" image="ui-icon-close">
							</p:commandButton>


							<p:confirmDialog message="Deseja excluir este registro?"
								showEffect="bounce" hideEffect="explode"
								header="Confirmação de Exclusão" severity="alert"
								widgetVar="conf#{item.id}">

								<p:commandButton ajax="false" type="push" value="Sim"
									action="#{boletimMB.acaoExcluirItem}" immediate="true"
									image="ui-icon-check">
									<f:param value="#{item.id}" name="itemId" />
								</p:commandButton>

								<p:commandButton value="Não" onclick="conf#{item.id}.hide()"
									type="button" image="ui-icon-close" />
							</p:confirmDialog>
						</h:panelGroup>
					</p:column>

					<f:facet name="footer">
						<h:panelGroup layout="block" style="text-align: center">
							<p:commandButton action="#{boletimMB.acaoSalvar}" value="Salvar">
								<!-- <f:ajax execute=":formulario" render=":formulario :formulario:formularioItem"></f:ajax> -->
							</p:commandButton>
						</h:panelGroup>
					</f:facet>

				</p:dataTable>
			</h:form>
		</h:form>
	</ui:define>
</ui:composition>
</html>
K

Cara, se a lista “itens” contém objetos com id(persistidos no banco) e sem id(novos itens adicionados) pra não ficar percorrendo lista e escrevendo código a tôa, faz o seguinte, ao invés de passar o id como parâmetro no botão excluir você faz:

Muda seu método acaoExcluirItem() para receber o objeto itemBoletim

acaoExcluirItem(ItemBoletim itemBoletim){
     itens.remove(itemBoletim);
}

Daí no botão excluir No action tú passa o “var” do teu dataTable dentro do construtor assim

action="#{boletimMB.acaoExcluirItem(item)}"

Pronto! Vc não vão precisar do método buscaItemDaLista()… Ele já saberá de qual item se trata independente de ter sido persistido ou não e remove… Pelo menos usando richFaces eu faço assim, diga ai se com primeFaces funfa… Tenta ai

G

Ola kelvis !

Fiz o que vc falou deu certo, agora está acontecendo o que aconteceu com vc, ou seja, ao excluir um item ele exclui o primeiro e não o que eu pedir para exclui. Na minha classe ItemBoletim eu implementei os metodos equals e equals so com o id assim como vc falou mas não esta resolvendo, pode me falar o que pode estar acontecendo?

segue minha classe:

package br.com.estub.boletim.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class ItemBoletim implements Serializable {

	@Id
	@GeneratedValue
	private Long id;

	@Column(nullable = false)
	@Temporal(TemporalType.DATE)
	private Calendar data = Calendar.getInstance();

	private BigDecimal frete;

	private BigDecimal custoDeslocamento;

	private BigDecimal maoDeObraTercerizada;

	private BigDecimal refeicao;

	private BigDecimal hospedagem;

	private BigDecimal documentacao;

	private BigDecimal outrasDespesas;

	@ManyToOne
	private Boletim boletim;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Calendar getData() {
		return data;
	}

	public void setData(Calendar data) {
		this.data = data;
	}

	public BigDecimal getFrete() {
		return frete;
	}

	public void setFrete(BigDecimal frete) {
		this.frete = frete;
	}

	public BigDecimal getCustoDeslocamento() {
		return custoDeslocamento;
	}

	public void setCustoDeslocamento(BigDecimal custoDeslocamento) {
		this.custoDeslocamento = custoDeslocamento;
	}

	public BigDecimal getMaoDeObraTercerizada() {
		return maoDeObraTercerizada;
	}

	public void setMaoDeObraTercerizada(BigDecimal maoDeObraTercerizada) {
		this.maoDeObraTercerizada = maoDeObraTercerizada;
	}

	public BigDecimal getRefeicao() {
		return refeicao;
	}

	public void setRefeicao(BigDecimal refeicao) {
		this.refeicao = refeicao;
	}

	public BigDecimal getHospedagem() {
		return hospedagem;
	}

	public void setHospedagem(BigDecimal hospedagem) {
		this.hospedagem = hospedagem;
	}

	public BigDecimal getDocumentacao() {
		return documentacao;
	}

	public void setDocumentacao(BigDecimal documentacao) {
		this.documentacao = documentacao;
	}

	public BigDecimal getOutrasDespesas() {
		return outrasDespesas;
	}

	public void setOutrasDespesas(BigDecimal outrasDespesas) {
		this.outrasDespesas = outrasDespesas;
	}

	public Boletim getBoletim() {
		return boletim;
	}

	public void setBoletim(Boletim boletim) {
		this.boletim = boletim;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ItemBoletim other = (ItemBoletim) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	

}
G

O consertando o que digitei acima, os metodos que implementei foram: equals e hashCode

K

cara, faz o seguinte…

peguei o método “equals” que tú gereou e adicionei este código depois do “2º if”

if(obj.getClass().getName().toLowerCase().contains("javassist")){
			obj = (Object) ((HibernateProxy) obj)
			.getHibernateLazyInitializer().getImplementation();
		}

Substitui ai na tua classe ItemBoletim o método equals por esse e faz o teste

@Override  
    public boolean equals(Object obj) {  
        if (this == obj)  
            return true;  
        if (obj == null)  
            return false;
        if(obj.getClass().getName().toLowerCase().contains("javassist")){
			obj = (Object) ((HibernateProxy) obj).getHibernateLazyInitializer().getImplementation();
	}
        if (getClass() != obj.getClass())  
            return false;  
        ItemBoletim other = (ItemBoletim) obj;  
        if (id == null) {  
            if (other.id != null)  
                return false;  
        } else if (!id.equals(other.id))  
            return false;  
        return true;  
    }

Acontece que o Hibernate provavelmente está fazendo o carregamento tardio desse objeto e colocando ele dentro de uma implementação chamada “javassist”, dessa forma ele se perde na hora de comparar os objetos e exclui o valor errado! Testa ai e depois posta o resultado blz

G

Olá, fiz o teste que vc falou mas acontece a mesma coisa.

G

Ola, outra coisa estou usando o JPA com implementação do Hibernate não sei se isso tem alguma coisa a ver.

K

Cara, dá um Clean no teu projeto ai e no Servidor de aplicação e limpa o cache do navegador e faz novamente, se persistir avisa que vamos pesquisar e procurar uma outra solução blz

G

Eu ja tinha feito isso, fiz novamente agora pra ver se dava sorte mas continua a mesma coisa.

G

.

K

outra coisa, faz equals e hashCode na tua classe Boletim tbm e acrescenta aquela parada do javassist que coloquei lá

G

Fiz o que vc falou gerei os respectivos métodos na classe Boletim e ItemBoletim
Mas esta acontecendo a mesma coisa.

G

Alguem pode me ajudar!

Criado 29 de abril de 2011
Ultima resposta 28 de jun. de 2012
Respostas 19
Participantes 4