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
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
Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes