ManytoMany com Spring não fecha sessão

19 respostas
N

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

19 Respostas

Hebert_Coelho

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

N

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

Hebert_Coelho

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

N

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

N

é 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

Hebert_Coelho

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

N

é 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);  
 	   }  
	 }
Hebert_Coelho

Muda isso aqui para depois do save

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

N

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

N

mudei,só que dá o mesmo erro

N

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

Hebert_Coelho

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

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

N

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

Hebert_Coelho

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í…

N

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

Hebert_Coelho

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.

R

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

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

Hebert_Coelho

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

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

R

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

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

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.

Criado 14 de dezembro de 2011
Ultima resposta 15 de dez. de 2011
Respostas 19
Participantes 3