HIbernate não remove entidade;
tenho duas entidade uma cliente
@Entity
@Table
@XmlRootElement
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
@SwingColumn(description = "Codígo")
private Integer idcliente;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(nullable = false, length = 100)
@SwingColumn(description = "Cliente")
private String cliente;
......
uma outra conjuge
@Entity
@Table
public class Conjuge implements Serializable {
private static final long serialVersionUID = 2L;
@Id
@NotNull
@Valid
@OneToOne
private Cliente cliente;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(nullable = false, length = 50)
private String conjuge;
quando crio um cliente e digo que esse cliente é casado e o mesmo tem um conjuge o hibernate faz a persistência normal, porem quando eu altero o cliente e informo que ele é solteiro e mando o hibernate deleta o conjuge ele faz o comit porem não deleta, mas quando delete o cliente ele realmente deleta o cliente e também o conjuge, ou seja, so não consigo dele apenas o conjuge segue a baixo a classe do meu dao.
protected boolean removeEntity(Object entity) {
try {
iniciarTransacao();
getEm().remove(entity);
commitTransacao();
UtilMensagens.mensagemInformacao("Transação realizada com Sucesso!");
return true;
} catch (Exception e) {
rollbackTransacao();
UtilMensagens.mensagemErro("Transação não realizada erro \n: "
+ UtilErros.getMensagemErro(e));
return false;
}
}
protected EntityManager getEm() {
return em = EntityManagerUtil.getEntityManager();
}
public void iniciarTransacao() {
if (getEm().getTransaction().isActive() == false) {
em.getTransaction().begin();
}
}
public void rollbackTransacao() {
iniciarTransacao();
getEm().getTransaction().rollback();
}
public void commitTransacao() {
iniciarTransacao();
getEm().getTransaction().commit();
}
@Entity
@Table
@XmlRootElement
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
@SwingColumn(description = "Codígo")
private Integer idcliente;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(nullable = false, length = 100)
@SwingColumn(description = "Cliente")
private String cliente;
......
uma outra conjuge
@Entity
@Table
public class Conjuge implements Serializable {
private static final long serialVersionUID = 2L;
@Id
@NotNull
@Valid
@OneToOne
private Cliente cliente;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(nullable = false, length = 50)
private String conjuge;
quando crio um cliente e digo que esse cliente é casado e o mesmo tem um conjuge o hibernate faz a persistência normal, porem quando eu altero o cliente e informo que ele é solteiro e mando o hibernate deleta o conjuge ele faz o comit porem não deleta, mas quando delete o cliente ele realmente deleta o cliente e também o conjuge, ou seja, so não consigo dele apenas o conjuge segue a baixo a classe do meu dao.
protected boolean removeEntity(Object entity) {
try {
iniciarTransacao();
getEm().remove(entity);
commitTransacao();
UtilMensagens.mensagemInformacao("Transação realizada com Sucesso!");
return true;
} catch (Exception e) {
rollbackTransacao();
UtilMensagens.mensagemErro("Transação não realizada erro \n: "
+ UtilErros.getMensagemErro(e));
return false;
}
}
protected EntityManager getEm() {
return em = EntityManagerUtil.getEntityManager();
}
public void iniciarTransacao() {
if (getEm().getTransaction().isActive() == false) {
em.getTransaction().begin();
}
}
public void rollbackTransacao() {
iniciarTransacao();
getEm().getTransaction().rollback();
}
public void commitTransacao() {
iniciarTransacao();
getEm().getTransaction().commit();
}
John Lima
Curtidas 0
Respostas
Ronaldo Lanhellas
11/09/2014
Aparece algum erro ao tentar deletar o Conjuge ? Se sim, poste aqui. Da uma olhada no seu mapeamento acho que está meio confuso esse @OneToOne, além do que penso que um Cliente tem um Conjuge mas um Conjuge também pode ser um Cliente, sendo assim não sei se faz sentido ter uma classe chamada Conjuge.
GOSTEI 0
John Lima
11/09/2014
Entendo eu criei uma classe conjuge, para não deixa campos em branco na tabela cliente, seguindo sua linha de raciocínio eu teria um alto relacionamento na tabela cliente ? e sobre o hibernate apresenta erro creio que não pois o metodo remover retorna true quando faz o commit e false quando faz roolback.
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Sim meu caro, você faria uma auto-relacionamento de cliente para cliente. Acho que torna mais fácil o seu trabalho, tente fazer isso.
GOSTEI 0
John Lima
11/09/2014
e como ficaria ?
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Tente assim:
@Entity
@Table
@XmlRootElement
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
@SwingColumn(description = "Codígo")
private Integer idcliente;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 100)
@Column(nullable = false, length = 100)
@SwingColumn(description = "Cliente")
private String cliente;
//Suas anotações aqui (seria one-to-one)
private Cliente conjuge;
GOSTEI 0
John Lima
11/09/2014
uma duvida como vou te um atributo cônjuge do tipo Cliente ou seja vou ter todos os dados do cliente inclusive o atributo cônjuge, quando fui seta as variarei setei todas menos o id e o próprio atributo conjuge
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
O conjuge deve ser um atributo "One-to-One", com Cascade Persiste,Update. Sua lógica está certa, setando todos os atributos no cliente menos o id e colocando o objeto conjuge que na verdade é outro cliente (que pode ou não estar cadastrado).
GOSTEI 0
John Lima
11/09/2014
quando eu persisto o cliente com o conjuge null ele commit a transação agora quando eu persisto com o objeto cônjuge setado ele me apresenta um erro :
xception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.hibernate.type.descriptor.java.AbstractTypeDescriptor.extractHashCode(AbstractTypeDescriptor.java:88)
at org.hibernate.type.AbstractStandardBasicType.getHashCode(AbstractStandardBasicType.java:210)
at org.hibernate.type.AbstractStandardBasicType.getHashCode(AbstractStandardBasicType.java:214)
at org.hibernate.type.EntityType.getHashCode(EntityType.java:381)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:263)
at org.hibernate.engine.spi.EntityKey.generateHashCode(EntityKey.java:114)
at org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:79)
at org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:247)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:172)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:836)
at org.hibernate.ejb.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:53)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:836)
at org.hibernate.ejb.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:53)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:424)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:263)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:853)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:827)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:831)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875)
at com.br.emobeli.modelo.GenericoDao.addEntity(GenericoDao.java:56)
at com.br.emobeli.modelo.ClienteDao.incluir(ClienteDao.java:31)
at com.br.emobeli.controle.ClienteControle.incluir(ClienteControle.java:28)
at com.br.emobeli.view.Menu.imovel(Menu.java:656)
at com.br.emobeli.view.Menu.jButton1ActionPerformed(Menu.java:460)
at com.br.emobeli.view.Menu.access$000(Menu.java:43)
at com.br.emobeli.view.Menu$1.actionPerformed(Menu.java:135)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
xception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.hibernate.type.descriptor.java.AbstractTypeDescriptor.extractHashCode(AbstractTypeDescriptor.java:88)
at org.hibernate.type.AbstractStandardBasicType.getHashCode(AbstractStandardBasicType.java:210)
at org.hibernate.type.AbstractStandardBasicType.getHashCode(AbstractStandardBasicType.java:214)
at org.hibernate.type.EntityType.getHashCode(EntityType.java:381)
at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:263)
at org.hibernate.engine.spi.EntityKey.generateHashCode(EntityKey.java:114)
at org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:79)
at org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:247)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:172)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:836)
at org.hibernate.ejb.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:53)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:836)
at org.hibernate.ejb.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:53)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:424)
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:263)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:853)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:827)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:831)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875)
at com.br.emobeli.modelo.GenericoDao.addEntity(GenericoDao.java:56)
at com.br.emobeli.modelo.ClienteDao.incluir(ClienteDao.java:31)
at com.br.emobeli.controle.ClienteControle.incluir(ClienteControle.java:28)
at com.br.emobeli.view.Menu.imovel(Menu.java:656)
at com.br.emobeli.view.Menu.jButton1ActionPerformed(Menu.java:460)
at com.br.emobeli.view.Menu.access$000(Menu.java:43)
at com.br.emobeli.view.Menu$1.actionPerformed(Menu.java:135)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Coloca a sua propriedade conjuge como CASCADE.PERSISTE não esqueça.
GOSTEI 0
John Lima
11/09/2014
eu coloquei como cascade all, afinal posso altera, incluir como também posso depois dizer que o cliente era solteiro e ter que remover os dados
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Tenta colocar ManyToOne e veja se funciona. E poste seu mapeamento alterado aqui.
GOSTEI 0