Seguinte, estou quebrando a cabeça a horas e não achei a solução até agora. :(.
Quando faço uma pesquisa(all) e depois tento remover ou alterar algum registro acontece a seguinte exceção.
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.rodrigo.stp.bean.PessoaBean#81]
at org.hibernate.engine.PersistenceContext.checkUniqueness(PersistenceContext.java:549)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:72)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:527)
at br.com.rodrigo.stp.infra.generics.AbstractGenericPersistenceHibernateDao.delete(AbstractGenericPersistenceHibernateDao.java:177)
a different object with the same identifier value was already associated with the session
Alguém sabe como resolver???
O esquisito é que consigo executar o crud normalmente via main acontece esse erro quando uso via web(usando struts).
Qdo vc vai remover ou alterar vc cria um pojo e popula ele ou pega um objeto q veio do banco mesmo. Já passei por esta exceção e acontecia qdo ia alterar ou remover um objeto q tava no banco, mas o meu problema era q eu criava um pojo para popular coms os dados q vinham do banco.
Se num for isso , posta o código relevante. (entre as tags code)
Cara essa excecao acontece qdo vc possui duas referencais a um mesmo objeto ( errrrrrrrrrr ), calma deixa eu explicar…
essa execao 'e muuuito util… pq evita redundancia, o q acontece 'e que no seu codigo vc possui um objeto q pode ser acessado via o relacionamento de outro, sem a necessidade de uma outra busca no banco, mas vc insiste em fazer outra busca, qdo o hibernate ve q vc poderia pegar o objeto pelo relacionamento e mesmo assim fez outra busca ele lanca essa porcaria ai…
se tiver mais duvidas estou a diposicao…
flw…
[quote=deniswsrosa]Cara essa excecao acontece qdo vc possui duas referencais a um mesmo objeto ( errrrrrrrrrr ), calma deixa eu explicar…
essa execao 'e muuuito util… pq evita redundancia, o q acontece 'e que no seu codigo vc possui um objeto q pode ser acessado via o relacionamento de outro, sem a necessidade de uma outra busca no banco, mas vc insiste em fazer outra busca, qdo o hibernate ve q vc poderia pegar o objeto pelo relacionamento e mesmo assim fez outra busca ele lanca essa porcaria ai…
se tiver mais duvidas estou a diposicao…
flw…[/quote]
Está acontecendo comigo este erro, na seguinte situação:
Tenho uma Lista de Opções com checkbox e cada linha tem mais 3 checkbox:
[]Opcao A []I []U []D
[]Opcao B []I []U []D
Quando marco uma Opção faço um Insert e ao marcar I, U ou D faço um Update. mas para fazer um update, tenho que buscar o ID da opção marcada.
Resolvi isso localizando uma outra referência a minha entidade. Usei o session.evict(entidade) . Pois a entidade estava pendurada no cache com o mesmo valor.
ou voce pode usar o merge, que nao lanca essa exception, pois nao colocara o dado objeto no first level cache!
é bom usar o merge por ele ser especificado pela JPA, ja o update nao é. assim voce vai se acostumando.
Estou com este erro também, mas na inclusão, ou save().
Tenho uma tabela A e para cada item desta tabela, gravo 100 itens na tabela B, então o que eu quero fazer é mais ou menos isso:
daoFactory.beginTransaction();
ObjetoA objA = new ObjetoA();
...
objA.save(); //para simplificar
for (int i = 0; i < 100; i++) {
ObjetoB objB = new ObjetoB();
...
ojbB.save(); //simplificando...
}
daoFactory.commit();
Pelo jeito não é possível fazer deste modo. Alguém teria alguma sugestão para que o commit() só se dê após a gravação de todos os objetos na tabelaB?
estava com esse mesmo problema utilizando o JBoss Seam.
Anotei a PK com @GeneratedValue(strategy = GenerationType.IDENTITY) nos meus beans e o tipo das variáveis (de primitivo para objeto) e tudo se resolveu.
poww…estou com o mesmo problema só que no meu caso é em um “delete”, então a solução do merge não serviria…
for (RetornoExameTemp retornoExameTemp : dataListRetorno) {
RetornoExameTempDAOFactory.getDAO().delete(retornoExameTemp);
}
e o erro…
br.com.is.commons.db.dao.InfrastructureException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.is.isenterprise.lab.model.RetornoExameTemp#Empresa=1, Paciente=1072, No. Sequência=2No. Sequência Exame=2Id. Retorno=258]
at br.com.is.commons.db.dao.DAOImplHb.delete(Unknown Source)
[quote=deniswsrosa]Cara essa excecao acontece qdo vc possui duas referencais a um mesmo objeto ( errrrrrrrrrr ), calma deixa eu explicar…
essa execao 'e muuuito util… pq evita redundancia, o q acontece 'e que no seu codigo vc possui um objeto q pode ser acessado via o relacionamento de outro, sem a necessidade de uma outra busca no banco, mas vc insiste em fazer outra busca, qdo o hibernate ve q vc poderia pegar o objeto pelo relacionamento e mesmo assim fez outra busca ele lanca essa porcaria ai…
se tiver mais duvidas estou a diposicao…
flw…[/quote]
Eu estou com o mesmo problema .
Como que agente corrige esse problema ?