Fórum HIbernate não remove entidade; #491842

11/09/2014

0

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();
}
John Lima

John Lima

Responder

Posts

12/09/2014

Ronaldo Lanhellas

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.
Responder

Gostei + 0

12/09/2014

John Lima

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.
Responder

Gostei + 0

12/09/2014

Ronaldo Lanhellas

Sim meu caro, você faria uma auto-relacionamento de cliente para cliente. Acho que torna mais fácil o seu trabalho, tente fazer isso.
Responder

Gostei + 0

15/09/2014

John Lima

e como ficaria ?
Responder

Gostei + 0

15/09/2014

Ronaldo Lanhellas

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;
Responder

Gostei + 0

15/09/2014

John Lima

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
Responder

Gostei + 0

16/09/2014

Ronaldo Lanhellas

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).
Responder

Gostei + 0

16/09/2014

John Lima

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)
Responder

Gostei + 0

16/09/2014

Ronaldo Lanhellas

Coloca a sua propriedade conjuge como CASCADE.PERSISTE não esqueça.
Responder

Gostei + 0

16/09/2014

John Lima

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
Responder

Gostei + 0

16/09/2014

Ronaldo Lanhellas

Tenta colocar ManyToOne e veja se funciona. E poste seu mapeamento alterado aqui.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar