[OFF/Hibernate] identifier of an instance of XX was altered from 3 to 1

274 views
Skip to first unread message

Robson Luis Ferreira

unread,
May 11, 2009, 12:43:39 PM5/11/09
to jav...@googlegroups.com

Olá a todos

Seguinte .... tenho duas classes mapeadas como entidades do Hibernate

=================
Atividade.java
=================
@Entity
@Table(name = "ATIVIDADE")publicclassAtividade implementsSerializable {privatestaticfinallongserialVersionUID= 1L;@Id@Basic(optional = false)@Column(name = "id_atividade")@GeneratedValue(strategy=GenerationType.IDENTITY) privateInteger idAtividade;@JoinColumn(name = "UNIDADE_id_unidade", referencedColumnName = "id_unidade", insertable = true, updatable = true)@ManyToOne(fetch = FetchType.EAGER, optional = false)@Fetch(FetchMode.JOIN)@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)privateUnidade idUnidade; 
etc ....
 
 
==================
Unidade.java
==================@Entity
@Table(name = "UNIDADE")publicclassUnidade implementsSerializable {privatestaticfinallongserialVersionUID= 1L;@Id}@Basic(optional = false)@Column(name = "id_unidade")privateInteger idUnidade;@Column(name = "nm_unidade")privateString nmUnidade;@ManyToMany(mappedBy = "unidadeCollection")privateCollection<Curso> cursoCollection;@OneToMany(cascade = CascadeType.ALL, mappedBy = "idUnidade")privateCollection<AtividadeEquipe> atividadeEquipeCollection;@OneToMany(mappedBy = "idUnidade", fetch = FetchType.LAZY)@Cascade(org.hibernate.annotations.CascadeType.ALL)privateCollection<Atividade> atividadeCollection;publicUnidade() {
 
etc. .........
 
 
E um erro que ocorre quando tento alterar a Unidade da Atividade
 
=======
Dao
=======getEntityManager().merge(object);
}@Transactional(readOnly = false, propagation = Propagation.REQUIRED)publicT atualizar(T object) {returnobject;
 
 
 Caused by:
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(
at org.hibernate.impl.SessionImpl.flush(org.hibernate.HibernateException: identifier of an instance of br.edu.anhanguera.plusit.scpsocial.entities.Unidade was altered from 3 to 1DefaultFlushEntityEventListener.java:58)DefaultFlushEntityEventListener.java:164)DefaultFlushEntityEventListener.java:120)AbstractFlushingEventListener.java:196)AbstractFlushingEventListener.java:76)DefaultFlushEventListener.java:26)SessionImpl.java:1000)
 
E é esse mesmo meu objetivo ... alterar id_unidade de Atividade de 3 para 1
 
id_unidade não é PK, é apenas FK de Atividade
 
Já tentei alterar diversas vezes as anotações das entidades, já recuperei um novo objeto "Unidade" com o ID pretendido e setei dentro de Atividade ..... e o mesmo erro ocorre.
 
Alguém já passou por isso ou tem alguma carta na manga ???
 
JPA + JSF + Hibernate + SQLServer
 
 
Desde já, grato
 
  Robson Luis Ferreira
<a rel="nofollow" target="_blank" href="mailto:rlsfe...@yahoo.com.br">rlsfe...@yahoo.com.br</a>
Tel: (11) 9827-6406


Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

George Queiroz

unread,
May 11, 2009, 12:46:50 PM5/11/09
to jav...@googlegroups.com
se essa fk for parte de alguma chave primária, esta correto, ele não vai deixar alterar uma fk q é pk
 
o codigo poderia ta identado pelo menos :O

2009/5/11 Robson Luis Ferreira <rlsfe...@yahoo.com.br>

Robson

unread,
May 11, 2009, 1:05:35 PM5/11/09
to javasf: JavaServer Faces International Group
Olá George

id_unidade só é PK da própria tabela Unidade, e não de Atividade.
Mas note .... não quero alterar o valor do campo id_unidade da tabela
Unidade,mas sim o valor do campo UNIDADE_id_unidade de Atividade

Sorry pelo código ... qdo postei o e-mail ele estava identado .. rsrs

Segue novamente

Grato

====
Atividade.java
=====
@Entity
@Table(name = "ATIVIDADE")
public class Atividade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id_atividade")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idAtividade;

@JoinColumn(name = "UNIDADE_id_unidade", referencedColumnName =
"id_unidade", insertable = false, updatable = false)
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@Fetch(FetchMode.JOIN)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private Unidade idUnidade;


public Atividade() {
}

etc......



e
==========
Unidade.java
============
@Entity
@Table(name = "UNIDADE")
@NamedQueries({@NamedQuery(name = "Unidade.findAll", query = "SELECT u
FROM Unidade u"), @NamedQuery(name = "Unidade.findByIdUnidade", query
= "SELECT u FROM Unidade u WHERE u.idUnidade = :idUnidade"),
@NamedQuery(name = "Unidade.findByNmUnidade", query = "SELECT u FROM
Unidade u WHERE u.nmUnidade = :nmUnidade")})
public class Unidade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id_unidade")
private Integer idUnidade;
@Column(name = "nm_unidade")
private String nmUnidade;
@ManyToMany(mappedBy = "unidadeCollection")
private Collection<Curso> cursoCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idUnidade")
private Collection<AtividadeEquipe> atividadeEquipeCollection;

@OneToMany(mappedBy = "idUnidade", fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Collection<Atividade> atividadeCollection;

public Unidade() {
}





On 11 maio, 13:46, George Queiroz <george.ba....@gmail.com> wrote:
> se essa fk for parte de alguma chave primária, esta correto, ele não vai
> deixar alterar uma fk q é pk
>
> o codigo poderia ta identado pelo menos :O
>
> 2009/5/11 Robson Luis Ferreira <rlsferre...@yahoo.com.br>
>
>
>
>
>
> > Olá a todos
>
> > Seguinte .... tenho duas classes mapeadas como entidades do Hibernate
>
> > =================
> > Atividade.java
> > =================
> > @Entity
> > @Table(name = "ATIVIDADE")publicclassAtividade implementsSerializable
> > {privatestaticfinallongserialVersionUID= 1L;@Id@Basic(optional =
> > false)@Column(name =
> > "id_atividade")@GeneratedValue(strategy=GenerationType.IDENTITY)
> > privateInteger idAtividade;@JoinColumn(name = "UNIDADE_id_unidade",
> > referencedColumnName = "id_unidade", insertable = true, updatable =
> > true)@ManyToOne(fetch = FetchType.EAGER, optional =
> > false)@Fetch(FetchMode.JOIN)@Cascade(org.hibernate.annotations.CascadeType.­SAVE_UPDATE)privateUnidade
> > idUnidade;
> > etc ....
>
> > ==================
> > Unidade.java
> > ==================@Entity
> > @Table(name = "UNIDADE")publicclassUnidade implementsSerializable
> > {privatestaticfinallongserialVersionUID= 1L;@Id}@Basic(optional =
> > false)@Column(name = "id_unidade")privateInteger idUnidade;@Column(name =
> > "nm_unidade")privateString nmUnidade;@ManyToMany(mappedBy =
> > "unidadeCollection")privateCollection<Curso> cursoCollection;@OneToMany(cascade
> > = CascadeType.ALL, mappedBy = "idUnidade")privateCollection<AtividadeEquipe>
> > atividadeEquipeCollection;@OneToMany(mappedBy = "idUnidade", fetch =
> > FetchType.LAZY)@Cascade(org.hibernate.annotations.CascadeType.ALL)privateCo­llection<Atividade>
> > atividadeCollection;publicUnidade() {
>
> > etc. .........
>
> > E um erro que ocorre quando tento alterar a Unidade da Atividade
>
> > =======
> > Dao
> > =======getEntityManager().merge(object);
> > }@Transactional(readOnly = false, propagation =
> > Propagation.REQUIRED)publicT atualizar(T object) {returnobject;
>
> >  Caused by:
> > at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(
> > at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(
> > at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(
> > at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(
> > at
> > org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExec­utions(
> > at org.hibernate.event.def.DefaultFlushEventListener.onFlush(
> > at org.hibernate.impl.SessionImpl.flush(org.hibernate.HibernateException:
> > identifier of an instance of
> > br.edu.anhanguera.plusit.scpsocial.entities.Unidade was altered from 3 to
> > 1DefaultFlushEntityEventListener.java:58)DefaultFlushEntityEventListener.ja­va:164)DefaultFlushEntityEventListener.java:120)AbstractFlushingEventListen­er.java:196)AbstractFlushingEventListener.java:76)DefaultFlushEventListener­.java:26)SessionImpl.java:1000)
>
> > E é esse mesmo meu objetivo ... alterar id_unidade de Atividade de 3 para 1
>
> > id_unidade não é PK, é apenas FK de Atividade
>
> > Já tentei alterar diversas vezes as anotações das entidades, já recuperei
> > um novo objeto "Unidade" com o ID pretendido e setei dentro de Atividade
> > ..... e o mesmo erro ocorre.
>
> > Alguém já passou por isso ou tem alguma carta na manga ???
>
> > JPA + JSF + Hibernate + SQLServer
>
> > Desde já, grato
>
> >   Robson Luis Ferreira
> > <a rel="nofollow" target="_blank" href="mailto:rlsferre...@yahoo.com.br">
> > rlsferre...@yahoo.com.br</a>
> > Tel: (11) 9827-6406
>
> >      Veja quais são os assuntos do momento no Yahoo! +Buscados
> >http://br.maisbuscados.yahoo.com- Ocultar texto das mensagens anteriores -
>
> - Mostrar texto das mensagens anteriores -

George Queiroz

unread,
May 11, 2009, 2:11:57 PM5/11/09
to jav...@googlegroups.com
pelo erro ele ta dzdo q vc ta alterando o id de uma entidade de 3 para 1, tem q ver se relamente não esta acontecendo o q falei, alterando o id de alguma entidade.

2009/5/11 Robson <rlsfe...@gmail.com>

Robson Luis Ferreira

unread,
May 12, 2009, 3:53:42 PM5/12/09
to jav...@googlegroups.com
Olá George
 
É ...pelo erro tbém achei isso.
 
Mas estou alterando apenas o objeto Unidade q está dentro de Atividade.
 
Para ter certeza disso até criei um novo objeto para recuperar o id e setar em Atividade
 

Unidade alt =

bd.getDominioFacade().getUnidadePorId(getAtividadeUnidade().getIdUnidade().intValue());

Unidade alt2 = new Unidade();

alt2.setIdUnidade(alt.getIdUnidade());

atividade.setUnidade(alt2);

 

Tem mais alguma idéia ??

 

Como faço para ter certeza de q o Hibernate, de alguma forma, por baixo dos pano não esteja tentando atualizar "Unidade" ??

Debuguei o código e em nenhum momento ele acessa algum método da classe Unidade no momento de salvar "Atividade"

 

Obrigado

 

Robson

 

 
Robson Luis Ferreira

<a rel="nofollow" target="_blank" href="mailto:rlsfe...@yahoo.com.br">rlsfe...@yahoo.com.br</a>
Tel: (11) 9827-6406



De: George Queiroz <george...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Segunda-feira, 11 de Maio de 2009 15:11:57
Assunto: [javasf] Re: [OFF/Hibernate] identifier of an instance of XX was altered from 3 to 1
2009/5/11 Robson <rlsfe...@gmail.com>


Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes

George Queiroz

unread,
May 12, 2009, 3:57:27 PM5/12/09
to jav...@googlegroups.com
rapaz, so testando, de bate pronto tb num tenho outra id[eia....
 
mais com fé e paciência c resolve.

2009/5/12 Robson Luis Ferreira <rlsfe...@yahoo.com.br>

Robson Luis Ferreira

unread,
May 12, 2009, 4:17:51 PM5/12/09
to jav...@googlegroups.com
hauhaooa.....
O problema é q minha paciência já foi: 2 dias nisso .......
:D
 
Mas a fé persiste
 
Valeu cara .....


De: George Queiroz <george...@gmail.com>
Para: jav...@googlegroups.com
Enviadas: Terça-feira, 12 de Maio de 2009 16:57:27
Reply all
Reply to author
Forward
0 new messages