galera antes q eu me auto suicide a mim mesmo:
tenho um relacionamento manytomany: 1 imovel tem pode ter varios anuncios e um mesmo anuncio pode ter varios imovies. Sussa.
Imovel
@ManyToMany(mappedBy = "imoveis", targetEntity = Anuncio.class)
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK})
@org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.FALSE)
private java.util.List anuncio = new java.util.ArrayList();
Anuncio
@ManyToMany(targetEntity=Imovel.class)
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK})
@JoinTable(name="tab_imovel_anuncio", joinColumns={ @JoinColumn(name="anuncio") }, inverseJoinColumns={ @JoinColumn(name="referencia") })
@LazyCollection(LazyCollectionOption.FALSE)
private java.util.Set imoveis = new java.util.HashSet();
minha duvida é como fazer o save dessa entidades. pq eu jah tentei de todas as formas: salvando apenas o objeto imovel, salvando todos os anuncios e depois o imovel, e finalmente removendo o imovel dos anuncios depois adicionando o imovel nos anuncios e salvando e finalmente salvando o imovel. Nas duas primeiras tentativas as operações não eram completadas, e na ultima recebo o seguinte erro:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [entidades.Imovel#1]
trecho q faz o salve:
Session session = getSession();
session.lock(imovel, LockMode.NONE);
for (Object obj : imovel.getAnuncio()) {
((Anuncio) obj).getImoveis().remove(imovel);
session.saveOrUpdate(((Anuncio) obj));
}
session.clear();
formAnuncio.populateBean(imovel);
formImovel.populateBean(imovel);
formImovelEstru.populateBean(imovel);
for(Object obj: imovel.getAnuncio()){
((Anuncio) obj).getImoveis().add(imovel);
session.saveOrUpdate(obj);
}
session.saveOrUpdate(imovel);
vlw galera