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 Tadeus Garsva <ta...@takas.lt> on 2003/08/01 06:55:40 UTC

Prefetched Relationship for M:N collection

Hi,

Could I use PrefetchedRelationship for  M:N nondecomposed collection?
(query.addPrefetchedRelationship("a"), where "a" is a nondecomposed M:N
collection).
I tried, but I got a exception in CollectionPrefetcher.

Thanks in advance.

Best regards

Tadeus Garsva




---------------------------------------------------------------------
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


Broker.store(x) issue

Posted by ro...@bowtech.com.
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


Re: Prefetched Relationship for M:N collection

Posted by Jakob Braeuchi <jb...@gmx.ch>.
hi tadeus,

what kind of exception , please !

jakob

Tadeus Garsva wrote:

> Hi,
>
> Could I use PrefetchedRelationship for  M:N nondecomposed collection?
> (query.addPrefetchedRelationship("a"), where "a" is a nondecomposed M:N
> collection).
> I tried, but I got a exception in CollectionPrefetcher.
>
> Thanks in advance.
>
> Best regards
>
> Tadeus Garsva
>
>
>
>
> ---------------------------------------------------------------------
> 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


Re: Prefetched Relationship for M:N collection

Posted by Tadeus Garsva <ta...@takas.lt>.
Thanks for Your answer.

here uou are stack trace:

java.lang.ArrayIndexOutOfBoundsException: 0
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.buildPrefetchCriteriaMultipleKeys(CollectionPrefetcher.java:184)
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.buildPrefetchQuery(CollectionPrefetcher.java:112)
	at 
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherImpl.buildPrefetchQueries(RelationshipPrefetcherImpl.java:196)
	at 
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherImpl.prefetchRelationship(RelationshipPrefetcherImpl.java:138)
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.prefetchRelationship(CollectionPrefetcher.java:261)
	at 
org.apache.ojb.broker.accesslayer.RsIterator.prefetchRelationships(RsIterator.java:348)
	at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:201)
	at 
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:95)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:2375)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1716)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1347)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1519)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1555)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1544)
	at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:317)
	at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:317)
	at mesa.TestPrefetched.<init>(TestPrefetched.java:69)
	at mesa.TestPrefetched.main(TestPrefetched.java:93)
rethrown as org.apache.ojb.broker.PersistenceBrokerException: 0
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1526)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1555)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1544)
	at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:317)
	at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(DelegatingPersistenceBroker.java:317)
	at mesa.TestPrefetched.<init>(TestPrefetched.java:69)
	at mesa.TestPrefetched.main(TestPrefetched.java:93)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.buildPrefetchCriteriaMultipleKeys(CollectionPrefetcher.java:184)
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.buildPrefetchQuery(CollectionPrefetcher.java:112)
	at 
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherImpl.buildPrefetchQueries(RelationshipPrefetcherImpl.java:196)
	at 
org.apache.ojb.broker.accesslayer.RelationshipPrefetcherImpl.prefetchRelationship(RelationshipPrefetcherImpl.java:138)
	at 
org.apache.ojb.broker.accesslayer.CollectionPrefetcher.prefetchRelationship(CollectionPrefetcher.java:261)
	at 
org.apache.ojb.broker.accesslayer.RsIterator.prefetchRelationships(RsIterator.java:348)
	at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:201)
	at 
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:95)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:2375)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1716)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1347)
	at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java:1519)
	... 6 more

Best regards

Tadeus Garsva


hi tadeus,

what kind of exception , please !

jakob

Tadeus Garsva wrote:

 > Hi,
 >
 > Could I use PrefetchedRelationship for  M:N nondecomposed collection?
 > (query.addPrefetchedRelationship("a"), where "a" is a nondecomposed M:N
 > collection).
 > I tried, but I got a exception in CollectionPrefetcher.
 >
 > Thanks in advance.
 >
 > Best regards
 >
 > Tadeus Garsva
 >
 >
 >
 >
 > ---------------------------------------------------------------------
 > 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





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