Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 21246|Resposta: 0

[Fonte] um objeto diferente com o mesmo valor identificador já estava associado a...

[Copiar link]
Publicado em 01/07/2016 10:48:52 | | | |
Um objeto diferente com o mesmo valor identificador já estava associado à sessão: 398FDbba-57B8-4D3D-B84B-4C0C0B497F02, da entidade: XXX



Já encontrei esse erro duas vezes no total, e nunca encontrei uma boa solução, e esse erro aconteceu

A razão provavelmente é bem conhecida, porque no hibernar há dois logos idênticos na mesma sessão

No entanto, se for uma entidade diferente, esse erro será reportado ao executar a operação saveOrUpdate(object).

Hehe, talvez você diga que não há diferença entre o que você diz e o que não diz, eu admito, hehe, não sei os detalhes

Por que esse erro ocorreu, caso contrário não teria sido resolvido por muito tempo, agora, dê um erro temporário

A solução é dar a pessoas como eu, que não têm como encontrar a causa raiz uma forma de continuar implementando

(Claro que está correto, mas não começa pela causa)
    Na verdade, é muito simples resolver esse problema, basta executar a operação session.clean()

Mas você realizou a operação saveOrUpdate(object) após a operação limpa, o que é possível

"Encontrei duas representações da mesma coleção", procurei muitas informações.

Não há uma boa explicação, e este artigo é a que mais ajuda

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

Por fim, pode ser resolvido pelo método session.refresh(object), note que quando o objeto não está

Se for um objeto com dados no banco de informações, você não pode usar o fator session.refresh(object)

Para atualização, é buscar novamente o objeto da sessão de hibernação, caso não haja nenhum objeto na sessão

Se existir esse objeto, um erro será reportado, então você precisa julgar antes de usar saveOrUpdate(object).

Quebre

    Claro, a solução mais fácil para esse problema é usar o merge() que vem com o Hibernate.

método. No entanto, sempre sinto que, quando encontro problemas, uso o método muito útil que vem com esse software

(comparado ao saveOrUpdate(), save(), update()) é muito desagradável.
    Mais tarde também descobri que esse erro frequentemente aparece em mapeamentos de um para muitos e de muitos para muitos, por favor, fique aqui

Tenha cuidado ao usar mapeamento de um para muitos e de muitos para muitos
Solução de Problemas e Tratamento do Hibernado
1、Um objeto diferente com o mesmo valor de identificador já estava associado à sessão。
Motivo do erro: No hibernar, existem duas identidades idênticas na mesma sessão, mas entidades diferentes.
Solução alternativa 1: session.clean()
PS: Se você realizar operações para alterar o estado dos dados, como saveOrUpdate(objeto), após a operação limpa, pode receber uma exceção "Encontrados duas representações da mesma coleção".
Solução alternativa 2: session.refresh(object)
PS: Quando o objeto não é um objeto com dados no banco de dados, você não pode usar session.refresh(object) porque o método é buscar o objeto novamente da sessão de hibernação; se não houver objeto na sessão, um erro será reportado, então você precisa julgar antes de usar saveOrUpdate(object).
Solução 3: session.merge(objecto)
PS: O método próprio do Hibernate é recomendado.
2、Encontrei duas representações da mesma coleção
Causa do erro: Veja 1.
Solução alternativa: session.merge(object)
As duas anomalias acima frequentemente aparecem no mapeamento um-para-muitos e no mapeamento muitos-para-muitos




Causas do erro:

Mito:Você não pode criar um novo objeto de usuário e depois obter as informações do usuário com base no ID de usuário e atribuí-las a esse objeto, de modo que um objeto diferente com o mesmo valor de identificador já esteja associado ao erro da sessão!!





Anterior:Uso da dinâmica em C# 4.0
Próximo:Clone da replicação superficial de objetos em C#
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com