ManytoMany com Spring não fecha sessão

Bom dia, sou iniciante em programação e estou com um problema queando utilizo hibernate Annotations e Spring. Tento persistir uma classe no postgresq e ele dáum erro dizendo que há mais de um objeto com o mesmo id, mas já depurei no eclipse e vi que os objetos são diferentes, percebi que se eu utilizar o método .merge na minha classe DAO ele funciona, persiste o objeto, desde que eu já tenha um objeto no BD mas dá pau quando insiro um novo objeto, o erro me diz que o spring não está fechando a sessão e ele pode estar reconhecendo o objeto como outro objeto diferente em vez de ser o mesmo, alguém pode me ajudar a resolver isso?
a classe Grupo de questoes


@Entity
@Table(name="Grupo_Questoes_Perfil")
public class GrupoDeQuestoesPerfil extends PageObjectProfile{

	@Id
	@SequenceGenerator(name="GROUP_PROFILE", sequenceName="SEQ_GROUP_PROFILE")
	@GeneratedValue(generator="GROUP_PROFILE")
	@Column(nullable=false, unique=true)
	private Long idGroup;
	
	
	@Column(nullable=false)
	private String title;
	@Column
	private int number;
	

	@Column(nullable=false)
	private boolean standard;

	@Column(nullable=false)
	private int type;

	@ManyToMany(fetch=FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    @JoinTable(name="Pagina_Grupo_Questao_Perfil",
    		joinColumns=@JoinColumn(name="idGroup_Profile"),
    		inverseJoinColumns=@JoinColumn(name="idPage_Profile" )) 
    @LazyCollection(LazyCollectionOption.FALSE)		
	private List<PaginaPerfil> pageProfile = new ArrayList<PaginaPerfil>();	
 
	@ManyToMany(fetch=FetchType.LAZY)
    @Cascade({CascadeType.ALL })
    @JoinTable(name="Grupo_Questao_Questao_Perfil",
    		joinColumns={@JoinColumn(name="idGroup_Profile")},
    		inverseJoinColumns=@JoinColumn(name="idQuestion_Profile")
    		)
    @LazyCollection(LazyCollectionOption.FALSE)		
   
    private List<QuestaoPerfil> questionProfile = new ArrayList<QuestaoPerfil>();
    
	
    @OneToMany(mappedBy="questionGroupProfile",fetch=FetchType.LAZY)
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)   
    @OnDelete(action= OnDeleteAction.CASCADE)
 	private List<GrupoDeQuestoesPerfil> listQuestionGroupProfile = new ArrayList<GrupoDeQuestoesPerfil>();

	@ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="questionGroupProfile", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.ALL)
    private GrupoDeQuestoesPerfil questionGroupProfile;
    
    @Column
	private Double positionX;
    @Column
	private Double positionY;
    @Column
	private Double positionWidth;
    @Column
	private Double positionHeight;
    //*************getters e setters 

minha classe question


@Entity
@Table(name="Questao_Perfil")
public class QuestaoPerfil {
	@Id 
	@SequenceGenerator(name="GEN_QUESTION_PROFILE",sequenceName="SEQ_QUESTION_PROFILE")
	@GeneratedValue(generator = "GEN_QUESTION_PROFILE")
	@Column(nullable=false, unique=true)
	private Long idQuestionProfile;
	
	@Column(nullable=false)
	private String title;
	
	@Column(nullable=false)
	private int type;
	
	@Column(nullable=false)
	private boolean standard;

	@ManyToMany(fetch=FetchType.LAZY, cascade=javax.persistence.CascadeType.ALL)
    @Cascade({ CascadeType.MERGE})
    @JoinTable(name="Pagina_Questao_Perfil",
    		joinColumns=@JoinColumn(name="idQuestion_Profile", updatable=true),
    		inverseJoinColumns=@JoinColumn(name="idPage_Profile",updatable=true )) 	
	@LazyCollection(LazyCollectionOption.FALSE)
    private List<PaginaPerfil> pageProfile = new ArrayList<PaginaPerfil>();
 
	@ManyToMany(fetch=FetchType.LAZY)
    @Cascade({ CascadeType.ALL})
    @JoinTable(name="Grupo_Questao_Questao_Perfil",
    		joinColumns=@JoinColumn(name="idQuestion_Profile"),
    		inverseJoinColumns=@JoinColumn(name="idGroup_Profile"))
    //@LazyCollection(LazyCollectionOption.FALSE)		
 	private List<GrupoDeQuestoesPerfil> questionGroupProfile = new ArrayList<GrupoDeQuestoesPerfil>();	
   
	
    @ManyToMany(fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
    @JoinTable(name="Questao_Resposta_Profile",
    		joinColumns=@JoinColumn(name="idQuestion_Profile", updatable=true),
    		inverseJoinColumns=@JoinColumn(name="idAnswer_Profile",updatable=true )) 
    @LazyCollection(LazyCollectionOption.FALSE)		
	private List<RespostaPerfil> answerProfile ;
    
    @Column
	private Integer height;
    @Column
	private Integer width;
    @Column
	private boolean countMultiAnswer;
    @Column
	private String abstractTitle;
    @Column
	private int answerType;
    @Column
	private String typeFormat;
    @Column
	private Integer minAnswer;
    @Column
	private Integer maxAnswer;
    @Column
	private boolean allowNoAnswer;
    @Column
	private int number;
    
    /******           getters e setters               ****/

e o erro :

08:45:49,385  INFO SessionFactoryImpl:161 - building session factory
08:45:49,413  INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
08:45:49,416  INFO HibernateTransactionManager:415 - Using DataSource [org.springframework.jdbc.datasource.DriverManagerDataSource@1c0cb76] of Hibernate SessionFactory for HibernateTransactionManager
Exception in thread "AWT-EventQueue-0" org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:737)
	at br.com.illumeo.datatab.infrastructure.dao.DAO.salvar(DAO.java:26)
	at br.com.illumeo.datatab.infrastructure.util.ConvertToObjectPerfil.convert(ConvertToObjectPerfil.java:280)
	at teste.testaRecuperaObjetoPerfil.main(testaRecuperaObjetoPerfil.java:70)
	at br.com.illumeo.datatab.presentation.Principal$2.actionPerformed(Principal.java:85)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]
	at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:740)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
	... 31 more

Quando você está inserindo, o objeto está indo com ID? Ou sem ID?

o objeto é pego do banco de dados são feitas as operações necessárias e ele é novamente persistido, ele está com ID, isso já foi conferido

Vc não pode persistir um objeto que já tenha id.

mas ele é um update de um objeto que já estava no banco, com o spring pego ele, atualizo os dados e depois tento persistí-lo no banco com as atualizações novamente

é um sistema legado que utiliza um tipo especifico de dado, então
na vdd pego ele do bd de um tipo, faço a conversão para outro tipo da minha classe de negócio, trabalho os dados com o objeto do sistema e depois reconverto para o tipo do bd e persisto, mas no objeto da persistência são setados todos os dados que estavam no objeto do sistema para que ele possa fazer o update no bd, mas dá essa mensagem de erro, a conversão ocorre perfeitamente, só a persistência dá esse pau

Na hora de fazer update. Como você está fazendo?

é um dao genérico chamo o objeto.salvar(objeto objeto)


	 public T salvar(T entity) {  
 	   try {  
		   this.getHibernateTemplate().flush();
 		   this.getHibernateTemplate().clear();
 		   this.getHibernateTemplate().saveOrUpdate(entity)  ;
 		   return entity;  
 	   } catch (final HibernateException ex) {  
 	       throw convertHibernateAccessException(ex);  
 	   }  
	 }

Muda isso aqui para depois do save

this.getHibernateTemplate().flush(); this.getHibernateTemplate().clear();
Pq vc ta chamando isso antes do save?

para limpar a sessão e atualizar os dados só da sessão atual

mudei,só que dá o mesmo erro

o DAO genérico


public abstract class DAO <T> extends HibernateDaoSupport
{
	
	private Class<T> persistentClass;  
	 	
	public void setPersistentClass(Class<T> persistentClass) {
		this.persistentClass = persistentClass;
	}

	public Class<T> getPersistentClass() {  
		return this.persistentClass;  
	}
	
	 public T salvar(T entity) {  
 	   try {  
 		   this.getHibernateTemplate().saveOrUpdate(entity)  ;
 		   this.getHibernateTemplate().getSessionFactory().close();
		   this.getHibernateTemplate().flush();
 		   this.getHibernateTemplate().clear();

 		   return entity;  
 	   } catch (final HibernateException ex) {  
 	       throw convertHibernateAccessException(ex);  
 	   }  
	 }

	 public T modify(T entity) {  
	 	   try {  
	 		   this.getHibernateTemplate().flush();
	 		   this.getHibernateTemplate().update(entity)  ;
	 	       
	 	       return entity;  
	 	   } catch (final HibernateException ex) {  
	 	       throw convertHibernateAccessException(ex);  
	 	   }  
	 }
	 
	public void delete(T entity) {  
	   try { 
		   this.getHibernateTemplate().flush();
		   this.getHibernateTemplate().delete(entity);
	   } catch (final HibernateException ex) {  
	       throw convertHibernateAccessException(ex);  
	   }  
	}  

se pego o objeto e depois tento salvá-lo mudando do @Cascade.ALL para @Cascade.MERGE, funciona, mas daí a inserção para de funcionar

Da erro que pq vc esta mandando fechar antes de dar o flush

this.getHibernateTemplate().getSessionFactory().close(); this.getHibernateTemplate().flush(); this.getHibernateTemplate().clear();

alterei para


	 public T salvar(T entity) {  
 	   try {  
 		   this.getHibernateTemplate().saveOrUpdate(entity)  ;
		   this.getHibernateTemplate().flush();
 		   this.getHibernateTemplate().getSessionFactory().close();
 		   this.getHibernateTemplate().clear();

 		   return entity;  
 	   } catch (final HibernateException ex) {  
 	       throw convertHibernateAccessException(ex);  
 	   }  
	 }

e o erro é o mesmo, tô gerenciando as sessões com o spring, será que é alguma configuração dele que dá pau?Pq num relação manyToOne e OneToMany deu certo, mas ManyToMany deu erro

Mano. sem ofensas… Leia um livro sobre JPA ou Spring ou Transações ou coisas assim…

this.getHibernateTemplate().getSessionFactory().close(); Isso aqui tem sempre que ser o utlimo comando a ser utilizado quando trata uma transação na unha.

Para que você ta chamando esse dois?
this.getHibernateTemplate().flush();
this.getHibernateTemplate().clear();

Vc sabe para que funciona?

Não estou te zuando, ou diminuindo. É pq tem tando comando aí…

olha, eu disse que era iniciante e coloquei os comandos à medida em que pesquisei na net, esse erro não tem a ver com os comandos .flush() e .clear() pq inicialmente a classe salvar estava sem eles e o erro é o mesmo

	 public T salvar(T entity) {  
 	   try {
 		   this.getHibernateTemplate().saveOrUpdate(entity)  ;

 		   return entity;  
 	   } catch (final HibernateException ex) {  
 	       throw convertHibernateAccessException(ex);  
 	   }  
	 }

com a classe de persistência assim o erro é esse:

5:17:04,075  INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
15:17:04,078  INFO HibernateTransactionManager:415 - Using DataSource [org.springframework.jdbc.datasource.DriverManagerDataSource@959fa1] of Hibernate SessionFactory for HibernateTransactionManager
Exception in thread "AWT-EventQueue-0" org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:737)
	at br.com.illumeo.datatab.infrastructure.dao.DAO.salvar(DAO.java:26)
	at br.com.illumeo.datatab.infrastructure.util.ConvertToObjectPerfil.convert(ConvertToObjectPerfil.java:280)
	at teste.testaRecuperaObjetoPerfil.main(testaRecuperaObjetoPerfil.java:70)
	at br.com.illumeo.datatab.presentation.Principal$2.actionPerformed(Principal.java:85)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.illumeo.datatab.domain.model.QuestaoPerfil#1]
	at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:97)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:357)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:329)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:740)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
	... 31 more

pelo que eu vi e pesquisei o erro pode ser provocado pelas anotações do hibernate, mas daí não sei como alterar para que funcione, pq se vc vir minha classes as anotações deveriam funcionar

Pelo fato de ser iniciante que eu sugeri o livro.

Vc estava tendo problemas com a transação.

Vou deixar alguem que entenda mais de Spring para te ajudar.

Eu tenho um pouco de conhecimento em JPA apenas.

Vc não pode persistir um objeto que já tenha id.[/quote]

Pode sim,basta que o atributo referente ao ID não esteja marcado com @GeneratedValue

Vc não pode persistir um objeto que já tenha id.[/quote]

Pode sim,basta que o atributo referente ao ID não esteja marcado com @GeneratedValue[/quote]
Me expressei mal, persistir = método persist do entityManager.

Vc não pode persistir um objeto que já tenha id.[/quote]

Pode sim,basta que o atributo referente ao ID não esteja marcado com @GeneratedValue[/quote]
Me expressei mal, persistir = método persist do entityManager.[/quote]

Mas é disso msm q eu to falando :smiley:

Se o seu @ID estiver marcado com @GeneratedValue e vc passar o objeto pro persist(),vai receber um:“Detached entity passed to persist”,mas sem @GeneratedValue o JPA aceita de boa.