Salve galera, é o seguinte, estou a dias tentando achar uma solução para meu problema…Não consigo fazer o que preciso, se puderem dar umas dicas agradeço…
É o seguinte, eu tenho um cadastro de permissoes, nesse cadastro eu tenho uma JTable que permite associar um perfil a seus modulos de permissoes, e assim dar as permissoes: Inserir, Alterar, Consultar e Imprimir.
Postei a tela que estou falando.
Tudo funciona bem usando o merge(), porem o merge soh atualiza o que ja tem não insere outros registros. Eu preciso que quando não exista o registro, eu consiga inseri-lo gerando assim um novo registro para o perfil com o modulo novo.
Estou tentando usar saveOrUpdate(), mas não estou conseguindo fazer e ainda estou tendo o seguinte erro:
Exception occurred during event dispatching:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [classesbd.Yperfilmodulo#41]
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.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
at $Proxy0.saveOrUpdate(Unknown Source)
at controlpanelforms.ModulosPermissoesForm.alteraVinculaPerfilModuloPermissoes(ModulosPermissoesForm.java:1021)
at controlpanelforms.ModulosPermissoesForm.btnAlterar1ActionPerformed(ModulosPermissoesForm.java:829)
at controlpanelforms.ModulosPermissoesForm.access$1100(ModulosPermissoesForm.java:46)
at controlpanelforms.ModulosPermissoesForm$14.actionPerformed(ModulosPermissoesForm.java:604)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at java.awt.Component.show(Component.java:1584)
at java.awt.Component.setVisible(Component.java:1536)
at java.awt.Window.setVisible(Window.java:842)
at java.awt.Dialog.setVisible(Dialog.java:986)
at classesdecontrole.AbreDialog.abreDialog(AbreDialog.java:9)
at controlpanelforms.PrincipalForm.jButton2ActionPerformed(PrincipalForm.java:269)
at controlpanelforms.PrincipalForm.access$300(PrincipalForm.java:38)
at controlpanelforms.PrincipalForm$3.actionPerformed(PrincipalForm.java:152)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at java.awt.Component.show(Component.java:1584)
at java.awt.Component.setVisible(Component.java:1536)
at java.awt.Window.setVisible(Window.java:842)
at java.awt.Dialog.setVisible(Dialog.java:986)
at controlpanelforms.PrincipalForm$7.run(PrincipalForm.java:292)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Eu entendi o erro, de que esta tentando inserir um campo unico e tals, e ja existe. Porem, sendo assim deveria dar o Update.
Bem, não sei se é a maneira correta de se fazer isso, mas segue a maneira q estou tentando.
public void alteraVinculaPerfilModuloPermissoes(){
//este método altera as permissoes que o perfil ja possui
Long codP = Long.parseLong(codPerfil.getText());
Session sessao = new RetornaSessaoHibernate().hibernateSession();
sessao.beginTransaction();
SQLQuery query = sessao.createSQLQuery("SELECT * FROM yperfilmodulo AS p WHERE p.idperfil = :idPerfil");
query.addEntity(Yperfilmodulo.class);
query.setParameter("idPerfil", codP);
List<Yperfilmodulo> l = query.list();
Yperfil perfil = new Yperfil();
perfil.setId(codP);
for(int x = 0; x < gridPermissoesPorModulo.getRowCount(); x++){
Yperfilmodulo perfilModulo = new Yperfilmodulo();
perfilModulo.setId(l.get(x).getId());
Ymodulos modulos = new Ymodulos();
modulos.setId(Long.parseLong((String)gridPermissoesPorModulo.getValueAt(x, 0)));
perfilModulo.setYperfil(perfil);
perfilModulo.setYmodulos(modulos);
perfilModulo.setInserir(String.valueOf(gridPermissoesPorModulo.getValueAt(x, 2).toString()));
perfilModulo.setAlterar(String.valueOf(gridPermissoesPorModulo.getValueAt(x, 3).toString()));
perfilModulo.setConsultar(String.valueOf(gridPermissoesPorModulo.getValueAt(x, 4).toString()));
perfilModulo.setImprimir(String.valueOf(gridPermissoesPorModulo.getValueAt(x, 5).toString()));
sessao.saveOrUpdate(perfilModulo);
}
sessao.getTransaction().commit();
}
Se alguém ae puder dar uma ajuda ou uma dica ou até msm uma maneira mais simples de se fazer isso, agradeço.
obrigado
