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
