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 15:45:11 UTC

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

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