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 ro...@bowtech.com on 2003/08/09 01:05:53 UTC

Broker.store(x) issue

Have an issue when storing an object where the main object is stored but
referenced object isn't.  No error is shown.

All information is passed from the form fine.(is in a struts app)

With the following I would expect that the id of an AddressVO address_vo
would be stored in field address1 of MemberVO vo.

What am I missing??

DB = MySQL



public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
HttpServletResponse response) {

        DynaValidatorForm _form = (DynaValidatorForm)form;
        MemberVO vo = new MemberVO();
        AddressVO address_vo = new AddressVO();

        vo.setMemberNum((String)_form.get("memberNum"));
        vo.setFirstName((String)_form.get("firstName"));
        vo.setLastName((String)_form.get("lastName"));
        vo.setSuffix((String)_form.get("suffix"));
        // etc....

        address_vo.setAddress1((String)_form.get("address1"));
        address_vo.setAddress2((String)_form.get("address2"));
        address_vo.setCity((String)_form.get("city"));

address_vo.setCountryId(Integer.parseInt(_form.get("countryId").toString()))
;
        //etc...

        vo.setAddress1(address_vo);

        //insert member into DB
        PersistenceBroker broker = null;
        broker = PersistenceBrokerFactory.defaultPersistenceBroker();


        broker.beginTransaction();
        broker.store(vo);
// if I add line broker.store(address_vo) it is stored fine.
        broker.commitTransaction();

        return mapping.findForward("success");
    }
--------------------------------------------------------------
<class-descriptor class="com.bowtech.ojb.domainmodel.om.MemberVO"
table="MEMBERS">

    <field-descriptor name="id" column="id" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>

    <field-descriptor name="memberNum" column="memberNum"
jdbc-type="VARCHAR"/>

    <field-descriptor name="firstName" column="firstName"
jdbc-type="VARCHAR"/>

    <field-descriptor name="lastName" column="lastName"
jdbc-type="VARCHAR"/>

    <field-descriptor name="suffix" column="suffix" jdbc-type="VARCHAR"/>

<!-- etc....  -->

    <reference-descriptor name="address1"
class-ref="com.bowtech.ojb.domainmodel.om.AddressVO" auto-retrieve="true">

        <foreignkey field-ref="id"/>

    </reference-descriptor>

</class-descriptor>

<class-descriptor class="com.bowtech.ojb.domainmodel.om.AddressVO"
table="ADDRESSES">

    <field-descriptor name="id" column="id" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>

    <field-descriptor name="address1" column="address1"
jdbc-type="VARCHAR"/>

    <field-descriptor name="address2" column="address2"
jdbc-type="VARCHAR"/>

    <field-descriptor name="city" column="city" jdbc-type="VARCHAR"/>

    <field-descriptor name="stateId" column="stateId" jdbc-type="INTEGER"/>

    <field-descriptor name="countryId" column="countryId"
jdbc-type="INTEGER"/>



<!-- etc....  --->

</class-descriptor>


Thanks

Ross Rotherham



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


collection-descriptor: Incorrect field reference "null" in org.apache.ojb.broker.metadata.CollectionDescriptor

Posted by ro...@bowtech.com.
Hi All,

Am getting the following exception when trying to save a MemberVO with a vector containing an AddressVO

javax.servlet.ServletException: Incorrect field reference "null" in org.apache.ojb.broker.metadata.CollectionDescriptor@5aebd9[cascade delete=false,cascade retrieve=true,cascade store=true,is lazy=false,class of Items=class com.bowtech.ojb.domainmodel.om.AddressVO]
	at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:541)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:482)


<class-descriptor class="com.bowtech.ojb.domainmodel.om.MemberVO" table="MEMBERS">
    <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" autoincrement="true"/>
    <field-descriptor name="memberNum" column="memberNum" jdbc-type="VARCHAR"/>
    <field-descriptor name="firstName" column="firstName" jdbc-type="VARCHAR"/>
    <field-descriptor name="lastName" column="lastName" jdbc-type="VARCHAR"/>
    <field-descriptor name="suffix" column="suffix" jdbc-type="VARCHAR"/>

        <collection-descriptor name="addresses" element-class-ref="com.bowtech.ojb.domainmodel.om.AddressVO" auto- retrieve="true" auto-update="true">

                <inverse-foreignkey field-id="memberId"/>

        </collection-descriptor>
</class-descriptor>

<class-descriptor class="com.bowtech.ojb.domainmodel.om.AddressVO" table="ADDRESSES">
    <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" autoincrement="true"/>
    <field-descriptor name="address1" column="address1" jdbc-type="VARCHAR"/>
    <field-descriptor name="address2" column="address2" jdbc-type="VARCHAR"/>
    <field-descriptor name="city" column="city" jdbc-type="VARCHAR"/>
    <field-descriptor name="stateId" column="stateId" jdbc-type="INTEGER"/>
    <field-descriptor name="countryId" column="countryId" jdbc-type="INTEGER"/>
   <field-descriptor name="memberId" column="memberId" jdbc-type="BIGINT"/>
<!-- etc....  --->

</class-descriptor>



where 

addresses  is Vector in MemberVO

memberID is Long in AddressVO

broker code is below

Thanks




public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,HttpServletResponse response) {

        DynaValidatorForm _form = (DynaValidatorForm)form;
        MemberVO vo = new MemberVO();
        AddressVO address_vo = new AddressVO();

        vo.setMemberNum((String)_form.get("memberNum"));
        vo.setFirstName((String)_form.get("firstName"));
        vo.setLastName((String)_form.get("lastName"));
        vo.setSuffix((String)_form.get("suffix"));
        // etc....

        address_vo.setAddress1((String)_form.get("address1"));
        address_vo.setAddress2((String)_form.get("address2"));
        address_vo.setCity((String)_form.get("city"));
        address_vo.setCountryId(Integer.parseInt(_form.get("countryId").toString()));
        //etc...

        Vector v = new Vector();
        v.add(address_vo);
        vo.setAddresses(v);

        //insert member into DB
        PersistenceBroker broker = null;
        broker = PersistenceBrokerFactory.defaultPersistenceBroker();


        broker.beginTransaction();
        broker.store(vo);
// if I add line broker.store(address_vo) it is stored fine.
        broker.commitTransaction();

        return mapping.findForward("success");
    }


--------------------------------------------------------------





Ross Rotherham

Re: Broker.store(x) issue

Posted by Armin Waibel <ar...@code-au-lait.de>.
Hi,

did you tried set auto-update="true"?
in
<reference-descriptor name="address1"
      class-ref="com.bowtech.ojb.domainmodel.om.AddressVO"
      auto-retrieve="true"
      auto-update="true"
>
        <foreignkey field-ref="id"/>
 </reference-descriptor>

regards,
Armin

----- Original Message -----
From: <ro...@bowtech.com>
To: "OJB Users List" <oj...@db.apache.org>
Sent: Saturday, August 09, 2003 1:05 AM
Subject: Broker.store(x) issue


> Have an issue when storing an object where the main object is stored
but
> referenced object isn't.  No error is shown.
>
> All information is passed from the form fine.(is in a struts app)
>
> With the following I would expect that the id of an AddressVO
address_vo
> would be stored in field address1 of MemberVO vo.
>
> What am I missing??
>
> DB = MySQL
>
>
>
> public ActionForward execute(ActionMapping mapping, ActionForm form,
>                                  HttpServletRequest request,
> HttpServletResponse response) {
>
>         DynaValidatorForm _form = (DynaValidatorForm)form;
>         MemberVO vo = new MemberVO();
>         AddressVO address_vo = new AddressVO();
>
>         vo.setMemberNum((String)_form.get("memberNum"));
>         vo.setFirstName((String)_form.get("firstName"));
>         vo.setLastName((String)_form.get("lastName"));
>         vo.setSuffix((String)_form.get("suffix"));
>         // etc....
>
>         address_vo.setAddress1((String)_form.get("address1"));
>         address_vo.setAddress2((String)_form.get("address2"));
>         address_vo.setCity((String)_form.get("city"));
>
>
address_vo.setCountryId(Integer.parseInt(_form.get("countryId").toString
()))
> ;
>         file://etc...
>
>         vo.setAddress1(address_vo);
>
>         file://insert member into DB
>         PersistenceBroker broker = null;
>         broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>
>
>         broker.beginTransaction();
>         broker.store(vo);
> // if I add line broker.store(address_vo) it is stored fine.
>         broker.commitTransaction();
>
>         return mapping.findForward("success");
>     }
> --------------------------------------------------------------
> <class-descriptor class="com.bowtech.ojb.domainmodel.om.MemberVO"
> table="MEMBERS">
>
>     <field-descriptor name="id" column="id" jdbc-type="INTEGER"
> primarykey="true" autoincrement="true"/>
>
>     <field-descriptor name="memberNum" column="memberNum"
> jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="firstName" column="firstName"
> jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="lastName" column="lastName"
> jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="suffix" column="suffix"
jdbc-type="VARCHAR"/>
>
> <!-- etc....  -->
>
>     <reference-descriptor name="address1"
> class-ref="com.bowtech.ojb.domainmodel.om.AddressVO"
auto-retrieve="true">
>
>         <foreignkey field-ref="id"/>
>
>     </reference-descriptor>
>
> </class-descriptor>
>
> <class-descriptor class="com.bowtech.ojb.domainmodel.om.AddressVO"
> table="ADDRESSES">
>
>     <field-descriptor name="id" column="id" jdbc-type="INTEGER"
> primarykey="true" autoincrement="true"/>
>
>     <field-descriptor name="address1" column="address1"
> jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="address2" column="address2"
> jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="city" column="city" jdbc-type="VARCHAR"/>
>
>     <field-descriptor name="stateId" column="stateId"
jdbc-type="INTEGER"/>
>
>     <field-descriptor name="countryId" column="countryId"
> jdbc-type="INTEGER"/>
>
>
>
> <!-- etc....  --->
>
> </class-descriptor>
>
>
> Thanks
>
> Ross Rotherham
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
>
>



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