Como eu poderia remover um objeto pai quando seu id é chave estrangeira do seu objeto filho ?
Hibernate - ordem da remoção de itens
6 Respostas
é através do cascade na propriedade do pai!
Fallow
Não cara…
O pai não pode ser apagado primeiro senão vai dar pau de constraint no banco de dados (ai entra na história da chave estrangeira). O que eu gostaria que o hibernate fizesse seria:
- apagar todos os filhos depois o pai, ou
- apagar os filhos e o pai ao mesmo tempo.
Seria possível !?
Ou, como contornar este problema!?
Ah… e obrigado pela tentativa TedLoprao.
Vc (ou alguém) tem mais alguma idéia !?
Mas é só usar a cascade=“all”, por exemplo…
Não esqueça do inverse=“true” tbm!!
Se quiser postar os mapeamentos para dar uma olhada, fica mais fácil, heheh
fallow
Opa… claro …
net.sf.hibernate.JDBCException: could not delete: [com.db.gma.vo.MensagemVO#8a2336bafe793cac00fe793e58590003]
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244)
at com.db.gma.util.Persistence_85kpdc_EOImpl_812_WLStub.delete(Unknown Source)
at com.db.gma.vo.MensagemDaoTest.tearDown(MensagemDaoTest.java:83)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)
Caused by: com.db.gma.util.GmaException
at com.db.gma.util.PersistenceBean.delete(PersistenceBean.java:184)
at com.db.gma.util.Persistence_85kpdc_EOImpl.delete(Persistence_85kpdc_EOImpl.java:100)
at com.db.gma.util.Persistence_85kpdc_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:108)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:415)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Hibernate: delete from GMA_CONTROLE_FLUXO where ID_CTRL=?
net.sf.hibernate.JDBCException: could not delete: [com.db.gma.vo.MensagemVO#8a2336bafe793cac00fe793e5b090004]
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:618)
at net.sf.hibernate.impl.ScheduledDeletion.execute(ScheduledDeletion.java:29)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2414)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2372)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2236)
at com.db.gma.util.PersistenceBean.delete(PersistenceBean.java:179)
at com.db.gma.util.Persistence_85kpdc_EOImpl.delete(Persistence_85kpdc_EOImpl.java:100)
at com.db.gma.util.Persistence_85kpdc_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:108)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:415)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Caused by: java.sql.SQLException: ORA-02292: integrity constraint (GMATCS.SYS_C009550) violated - child record found
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:579)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1094)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2132)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2015)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2877)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:608)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22)
at net.sf.hibernate.persister.EntityPersister.delete(EntityPersister.java:599)
... 16 more
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class name="com.db.gma.vo.MensagemVO" table="GMA_CONTROLE_FLUXO"
>
<id name="mensagemId" type="java.lang.String" column="ID_CTRL" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property
name="usuarioAprovacao"
type="java.lang.String"
column="LOGIN_USU_APROV"
length="22"
/>
<property
name="codigoSituacao"
type="java.lang.Integer"
not-null="true"
column="COD_SIT"
/>
<many-to-one
name="gmaAplicacao"
class="com.db.gma.vo.GmaAplicacao"
not-null="true"
cascade="none"
>
<column name="COD_APLIC" />
</many-to-one>
<list name="GmaControleFluxoMsgs" lazy="false" inverse="true" cascade="all">
<key>
<column name="ID_CTRL" />
</key>
<index column="SEQ_MSG"/>
<one-to-many class="com.db.gma.vo.GmaControleFluxoMsg" />
</list>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class
name="com.db.gma.vo.GmaControleFluxoMsg"
table="GMA_CONTROLE_FLUXO_MSG"
>
<composite-id name="comp_id" class="com.db.gma.vo.GmaControleFluxoMsgPK" unsaved-value="any">
<key-property
name="seqMsg"
type="java.math.BigDecimal"
column="SEQ_MSG"
length="22"
/>
<key-many-to-one
name="mensagemVO"
class="com.db.gma.vo.MensagemVO"
>
<column name="ID_CTRL"
length="40"
not-null="true"
/>
</key-many-to-one>
</composite-id>
<property
name="msgTxt"
type="java.lang.String"
column="MSG_TXT"
length="4000"
/>
<property
name="msgXml"
type="java.lang.String"
column="MSG_XML"
length="4000"
/>
</class>
</hibernate-mapping>
E ae galera … alguma dica !?
Criado 19 de agosto de 2004
Ultima resposta 23 de ago. de 2004
Respostas 6
Participantes 2