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