Atualização de Campo em Relacionamento [Hibernate]

4 respostas
cs.santos0

iai pessual, blz?

tenho a seguinte situação, uma classe ContaPagar e uma clase Conta, quando uma conta a pagar for paga, o saldo da Conta relacionada com a ContaPagar deverá ser subtraido pelo valor da ContaPagar…até ai sem novidade, tudo feito, inclusive alterando o valor do saldo da Conta no banco.

Na tela de ContaPagar tudo esta correto, porem depois de pagar alguma conta a pagar e fazer a listagem na tela de Contas o saldo da conta alterada ainda permanece o anterior, porem no banco esta o valor alterado e correto, ele só nao mostra na tela. Para mostrar o valor correto, é necessario eu iniciar uma nova sessão no sistema. To desconfiado que é algo no modo como o Hibernate traz essas listagens.

Meu mapeamento esta assim:

Classe ContaPagar:

@ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="cop_con_id") @Fetch(FetchMode.JOIN) @Cascade({CascadeType.DELETE_ORPHAN, CascadeType.ALL}) private Conta conta;

Classe Conta:

@OneToMany(mappedBy = "conta", fetch = FetchType.LAZY) @Cascade(CascadeType.ALL) private Collection<ContaPagar> contasPagar;

Alguem sabe o pq desse comportamento?
vlw

4 Respostas

T

não está nada na sessão? Vc ta atualizando como com o hibernate? Por Update? Na hora que vc for atualizar puxe esse objeto do banco novamente, para que ele possa ser atualizado…algo assim:

daoFactory.beginTransaction();
objeto = daoFactory.getAlgumaCoisaDao().update(objeto);
daoFactory.commit();

e claro, seu update() deve retornar um objeto daquele tipo, se não faça

daoFactory.beginTransaction();
daoFactory.getAlgumaCoisaDao().update(objeto);
daoFactory.commit();

objeto = daoFactory.getAlgumaCoisaDao().find(objeto.getId());

acho que isso pode ajudar…

cs.santos0

vlw a resposta, mas acredito que nao seja isso ñ…

no banco esta tudo correto, esta atualizando o valor do campo…o problema é na hora de listar os dados e outra tela…pois o dado permanece o msm…

esse update ai que vc passou é para atualizar no banco…e isso ja esta sendo feito…

acredito que seja na estrategia de puxar os dados do banco, não é?
alguem ai pode ajudar?

T

vc traz os dados novamente depois q vc atualiza?

cs.santos0

sao telas e objetos diferentes…

em uma eu “pago uma contaa pagar” e ai eu atualizo o valor da Conta.

e em outra tela esta o gerenciamento de contas…com uma tela com varios filtros para listar as contas, que é ai que esta o problema, pois quando eu filtro a conta que eu alterei o valor vem com o valor antigo. Mas é estranho, pq no banco o valor esta certo, e se eu sair e criar uma nova sessão ai a listagem vem certa.

Eu to imaginando que o Hibernate nao esta fazendo essa busca diretamente no banco toda vez, e sim uma unica vez quando a sessao é aberta e o metodo é acessado pela primeira vez, como se fosse um comportamento lazy, eu gostaria de arrumar isso…o problema é que eu estou “supondo” isso, não tenho certeza, esse é o motivo do post…

Alguem ai ja passou por isso?
vlw

Criado 18 de agosto de 2009
Ultima resposta 18 de ago. de 2009
Respostas 4
Participantes 2