You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Fernando Bernardino <fe...@ptcom.com.br> on 2004/09/18 16:13:25 UTC

Problem deleting a class

Hi everybody!
I have a reference-descriptor where I have set auto-delete="true". Its a 1:1 mapping. But OJB is not deleting the ParentClass only the child. And no error is returned.
Only "PessoaFisica" is deleted, but "Pessoa" don't.
OJB 1.0rc5, Oracle 8.1.7

Thanks for your time.

repository_user.xml:

<class-descriptor class="br.com.ptcom.webField.model.PessoaVO" table="LAB.PESSOA" >
  <field-descriptor
    name="cdCgcCpf"
    column="CD_CGC_CPF"
    jdbc-type="INTEGER"
    primarykey="true"
  />
  <field-descriptor
    name="tpPessoa"
    column="TP_PESSOA"
    jdbc-type="VARCHAR"
    primarykey="true"
  />
  <field-descriptor
    name="cdPais"
    column="CD_PAIS"
    jdbc-type="INTEGER"
  />
  <reference-descriptor 
    name="paisVO"
    class-ref="br.com.ptcom.webField.model.PaisVO"
    auto-retrieve="true"
    >
   <foreignkey field-ref="cdPais"/>
  </reference-descriptor>
  
  <field-descriptor
    name="cdEstado"
    column="CD_ESTADO"
    jdbc-type="INTEGER"
  />
  <reference-descriptor 
    name="estadoVO"
    class-ref="br.com.ptcom.webField.model.EstadoVO"
    auto-retrieve="true"
    >
   <foreignkey field-ref="cdEstado"/>
   <foreignkey field-ref="cdPais"/>
  </reference-descriptor>
  
  <field-descriptor
    name="cdMunicipio"
    column="CD_MUNICIPIO"
    jdbc-type="INTEGER"
  />
  <reference-descriptor 
    name="municipioVO"
    class-ref="br.com.ptcom.webField.model.MunicipioVO"
    auto-retrieve="true"
    >
   <foreignkey field-ref="cdMunicipio"/>
   <foreignkey field-ref="cdEstado"/>
   <foreignkey field-ref="cdPais"/>
  </reference-descriptor>
  
  <field-descriptor
    name="dtAtualizacao"
    column="DT_ATUALIZACAO"
    jdbc-type="VARCHAR"
  />
  <field-descriptor
    name="nmUsuario"
    column="NM_USUARIO"
    jdbc-type="VARCHAR"
  />
</class-descriptor>

<class-descriptor class="br.com.ptcom.webField.model.PessoaFisicaVO" table="LAB.PESSOA_FISICA" >
  <field-descriptor
    name="cdCgcCpf"
    column="CD_CGC_CPF"
    jdbc-type="INTEGER"
    primarykey="true"
  />
  <reference-descriptor
    name="pessoaVO"
    class-ref="br.com.ptcom.webField.model.PessoaVO"
    auto-retrieve="true"
    auto-update="true"
    auto-delete="true"
    auto-insert="true"
    >
   <foreignkey field-ref="cdCgcCpf"/>
   <foreignkey field-ref="tpPessoa"/>
  </reference-descriptor>
  
  <field-descriptor
    name="tpPessoa"
    column="TP_PESSOA"
    jdbc-type="VARCHAR"
    primarykey="true"
  />
  <field-descriptor
    name="dtAtualizacao"
    column="DT_ATUALIZACAO"
    jdbc-type="VARCHAR"
  />
  <field-descriptor
    name="nmUsuario"
    column="NM_USUARIO"
    jdbc-type="VARCHAR"
  />
</class-descriptor>
---------------------------------------------------------------------------------------

public void testDeletePessoaFisica() {
  try{
   PessoaVO pessoaVO = new PessoaVO();
   pessoaVO.setCdCgcCpf(new Integer(18));
   pessoaVO.setTpPessoa("f");
   
   PessoaFisicaVO pessoaFisicaVO = new PessoaFisicaVO();
   pessoaFisicaVO.setPessoaVO(pessoaVO);
   pessoaFisicaVO.setTpPessoa(pessoaVO.getTpPessoa());
   
   PessoaBusinessDelegate pessoaBD = new PessoaBusinessDelegate();
   pessoaFisicaVO = pessoaBD.filterPessoaFisica(pessoaFisicaVO);
   pessoaBD.deletePessoaFisica(pessoaFisicaVO);
  }catch(Exception e){
   e.printStackTrace();
  }
 }



Fernando Bernardino

Re: Problem deleting a class

Posted by Armin Waibel <ar...@apache.org>.
Fernando Bernardino wrote:

> Hi everybody!
> I have a reference-descriptor where I have set auto-delete="true". Its a 1:1 mapping. But OJB is not deleting the ParentClass only the child. And no error is returned.
> Only "PessoaFisica" is deleted, but "Pessoa" don't.
> OJB 1.0rc5, Oracle 8.1.7
>

Your OJB version is a little bit out of date ;-)
As far as I can remember rc6 was the first version with new additional 
auto-xxx values (none, link , object) contain a bug when using old 
'true/false' setting. But in rc5 all worked fine. There a lot of tests 
in test-suite using auto-delete settings.

I assume there is something wrong in your test case. You are using your 
own "layer" code, so I can't comment this (don't have the sources). Your 
test code looks strange to me ;-), assume your are lookup an existing 
object this way

 >    PessoaFisicaVO pessoaFisicaVO = new PessoaFisicaVO();
 >    pessoaFisicaVO.setPessoaVO(pessoaVO);
 >    pessoaFisicaVO.setTpPessoa(pessoaVO.getTpPessoa());

but PessoaFisicaVO has an composed PK, but it seems you only set one PK 
field? Then OJB can't delete an "not existing" object from DB and does 
only delete the child (PessoaVO) - ok, you said that vice versa happend 
Pessoa deleted the other not, but maybe something similar happend ;-)

regards,
Armin


> Thanks for your time.
> 
> repository_user.xml:
> 
> <class-descriptor class="br.com.ptcom.webField.model.PessoaVO" table="LAB.PESSOA" >
>   <field-descriptor
>     name="cdCgcCpf"
>     column="CD_CGC_CPF"
>     jdbc-type="INTEGER"
>     primarykey="true"
>   />
>   <field-descriptor
>     name="tpPessoa"
>     column="TP_PESSOA"
>     jdbc-type="VARCHAR"
>     primarykey="true"
>   />
>   <field-descriptor
>     name="cdPais"
>     column="CD_PAIS"
>     jdbc-type="INTEGER"
>   />
>   <reference-descriptor 
>     name="paisVO"
>     class-ref="br.com.ptcom.webField.model.PaisVO"
>     auto-retrieve="true"
>     >
>    <foreignkey field-ref="cdPais"/>
>   </reference-descriptor>
>   
>   <field-descriptor
>     name="cdEstado"
>     column="CD_ESTADO"
>     jdbc-type="INTEGER"
>   />
>   <reference-descriptor 
>     name="estadoVO"
>     class-ref="br.com.ptcom.webField.model.EstadoVO"
>     auto-retrieve="true"
>     >
>    <foreignkey field-ref="cdEstado"/>
>    <foreignkey field-ref="cdPais"/>
>   </reference-descriptor>
>   
>   <field-descriptor
>     name="cdMunicipio"
>     column="CD_MUNICIPIO"
>     jdbc-type="INTEGER"
>   />
>   <reference-descriptor 
>     name="municipioVO"
>     class-ref="br.com.ptcom.webField.model.MunicipioVO"
>     auto-retrieve="true"
>     >
>    <foreignkey field-ref="cdMunicipio"/>
>    <foreignkey field-ref="cdEstado"/>
>    <foreignkey field-ref="cdPais"/>
>   </reference-descriptor>
>   
>   <field-descriptor
>     name="dtAtualizacao"
>     column="DT_ATUALIZACAO"
>     jdbc-type="VARCHAR"
>   />
>   <field-descriptor
>     name="nmUsuario"
>     column="NM_USUARIO"
>     jdbc-type="VARCHAR"
>   />
> </class-descriptor>
> 
> <class-descriptor class="br.com.ptcom.webField.model.PessoaFisicaVO" table="LAB.PESSOA_FISICA" >
>   <field-descriptor
>     name="cdCgcCpf"
>     column="CD_CGC_CPF"
>     jdbc-type="INTEGER"
>     primarykey="true"
>   />
>   <reference-descriptor
>     name="pessoaVO"
>     class-ref="br.com.ptcom.webField.model.PessoaVO"
>     auto-retrieve="true"
>     auto-update="true"
>     auto-delete="true"
>     auto-insert="true"
>     >
>    <foreignkey field-ref="cdCgcCpf"/>
>    <foreignkey field-ref="tpPessoa"/>
>   </reference-descriptor>
>   
>   <field-descriptor
>     name="tpPessoa"
>     column="TP_PESSOA"
>     jdbc-type="VARCHAR"
>     primarykey="true"
>   />
>   <field-descriptor
>     name="dtAtualizacao"
>     column="DT_ATUALIZACAO"
>     jdbc-type="VARCHAR"
>   />
>   <field-descriptor
>     name="nmUsuario"
>     column="NM_USUARIO"
>     jdbc-type="VARCHAR"
>   />
> </class-descriptor>
> ---------------------------------------------------------------------------------------
> 
> public void testDeletePessoaFisica() {
>   try{
>    PessoaVO pessoaVO = new PessoaVO();
>    pessoaVO.setCdCgcCpf(new Integer(18));
>    pessoaVO.setTpPessoa("f");
>    
>    PessoaFisicaVO pessoaFisicaVO = new PessoaFisicaVO();
>    pessoaFisicaVO.setPessoaVO(pessoaVO);
>    pessoaFisicaVO.setTpPessoa(pessoaVO.getTpPessoa());
>    
>    PessoaBusinessDelegate pessoaBD = new PessoaBusinessDelegate();
>    pessoaFisicaVO = pessoaBD.filterPessoaFisica(pessoaFisicaVO);
>    pessoaBD.deletePessoaFisica(pessoaFisicaVO);
>   }catch(Exception e){
>    e.printStackTrace();
>   }
>  }
> 
> 
> 
> Fernando Bernardino
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org