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 Dan Hanley <da...@magus.co.uk> on 2003/06/02 15:38:21 UTC

RE: Limited collection returned

Jin
Are you also running in a managed environment (e.g. jBoss)? 
I suspect the bug you're referring to is:
Type :        Defect
Issue Id :    OJB172
Reported by: Rob Kischuk
             rkischuk - (rkischuk <at> gttx.org)

Details:

Platform: PC
Operating system: windows 2000
Summary: Loading composite object leads to truncated collection
Description: Repeated calls to retrieve a collection of objects that each contain another object are
retrieving truncated results, which are incrementally built to their proper length using repeated
requests.
Status: New
Priority: Undecided
Severity: Major
Functional area: Setup

... which sounds like it could be the culprit. A colleague of mine is trying to trace through with the eclipse debugger to see if we can cast any light on this. 
 
You are not alone, its holding a lot of people up...
 
Dan

	-----Original Message----- 
	From: Jin Bal [mailto:jinbal@hotmail.com] 
	Sent: Fri 30/05/2003 22:07 
	To: OJB Users List 
	Cc: 
	Subject: Re: Limited collection returned
	
	

	I'm also having this problem - thank god someone else's said so !  it's been
	driving me mad ;-)
	
	i've been using ojb since 0.9.5 and have only noticed it recently. (sorry
	can't be more precise than that)
	here's the offending class descriptor
	
	    <class-descriptor class="com.buyacar.businessobjects.Vehicle"
	table="vehicle">
	   ....blah  blah properties etc
	  <!-- IMAGES -->
	   <collection-descriptor
	         name="images"
	         auto-retrieve="true"
	         element-class-ref="com.buyacar.businessobjects.VehicleImage">
	         <inverse-foreignkey field-id-ref="1"/>
	      </collection-descriptor>
	    </class-descriptor>
	
	    <class-descriptor class="com.buyacar.businessobjects.BACVehicleDetails"
	table="bac_details">
	
	             <reference-descriptor
	                        name="vehicle"
	                        class-ref="com.buyacar.businessobjects.Vehicle"
	                        auto-retrieve="true">
	                <foreignkey field-id-ref="2"/>
	             </reference-descriptor>
	
	    </class-descriptor>
	
	whenever I load a BACVehicleDetails (and therefore a  Vehicle)  I only ever
	get one image in the collection.
	
	
	more over I have a search engine that only returns 1 result the first time
	then 2 on the second submit then 3 ......etc  :-(
	
	heres the search engine code
	
	        PersistenceBroker broker = null;
	        try {
	            broker = getBroker();
	            Criteria criteria = new Criteria();
	
	            // check if theyve specified a price bracket
	            if(searchParams.getMaxPrice() !=null &&
	searchParams.getMinPrice()!=null) {
	
	criteria.addBetween("price",searchParams.getMinPrice(),searchParams.getMaxPr
	ice());
	            } else if(searchParams.getMaxPrice()!=null &&
	searchParams.getMinPrice()==null) {
	
	criteria.addLessOrEqualThan("price",searchParams.getMaxPrice());
	            } else if(searchParams.getMaxPrice()==null &&
	searchParams.getMinPrice()!=null)  {
	
	criteria.addGreaterOrEqualThan("price",searchParams.getMinPrice());
	            }
	
	            if(searchParams.getManufacturer() !=null &&
	searchParams.getModel()==null) {
	
	criteria.addEqualTo("vehicle.model.manufacturerId",searchParams.getManufactu
	rer());
	            }
	
	            if(searchParams.getModel() !=null) {
	
	criteria.addEqualTo("vehicle.modelId",searchParams.getModel());
	            }
	            if(searchParams.getBodyStyle() != null) {
	
	criteria.addEqualTo("vehicle.derivative.bodyStyleId",searchParams.getBodySty
	le());
	            }
	            if(searchParams.getFuelType() != null) {
	
	criteria.addEqualTo("vehicle.derivative.fuelId",searchParams.getFuelType());
	            }
	
	            if(searchParams.getOrderBy() !=null) {
	                criteria.addOrderByAscending(searchParams.getOrderBy());
	            }
	
	            if(searchParams.getChannel()!=null &&
	!searchParams.getChannel().equals("")) {
	                criteria.addEqualTo("channel",searchParams.getChannel());
	            }
	
	            criteria.addEqualTo("status",searchParams.getStatus());
	            criteria.addEqualTo("visibility",searchParams.getVisibility());
	            criteria.addGreaterOrEqualThan("displayTo",new
	java.util.Date());
	            criteria.addLessOrEqualThan("displayFrom",new java.util.Date());
	            Query query = new
	QueryByCriteria(BACVehicleDetails.class,criteria,true);
	
	            Collection c = broker.getCollectionByQuery(query);
	            logger.debug("collection size: "+c.size());
	            Iterator results = c.iterator();
	           ArrayList list = new ArrayList();
	
	            while(results.hasNext()) {
	                // perform cast now to check that we've got the correct
	object type
	                BACVehicleDetails vDetails = (BACVehicleDetails)
	results.next();
	                list.add(vDetails);
	            }
	            return list;
	        } finally {
	            if (broker!=null) {
	                broker.close();
	            }
	        }
	
	sorry for the long code post
	
	
	it seems that when the cache is filled up it works ok
	
	help this is stopping me going live with the site  :-(
	
	BTW I did a search on the dev list and noticed a bug opened on the 23rd MAy
	but i can't find it now
	
	cheers
	
	
	Jin
	
	----- Original Message -----
	From: "McCaffrey, John G." <Jo...@kraft.com>
	To: "'OJB Users List'" <oj...@db.apache.org>
	Sent: Friday, May 30, 2003 5:52 PM
	Subject: RE: Limited collection returned
	
	
	> yes, I also noticed that, and I tried pre-fetching, but that didn't help
	me
	> either.
	>
	> so are you having the same problem then? You are only getting one row
	back,
	> instead of many?
	>
	> (my collection is filled properly with the right child elements, but I am
	> not getting all of the parents that match the query, and the query is
	select
	> all parents)
	>
	> can you see the SQL? I couldn't get P6Spy to work, so I don't know what
	the
	> sql looks like.
	>
	> thanks for speaking up, I wonder if anyone else has had/is having this
	> problem!
	>
	> -John
	>
	> -----Original Message-----
	> From: Dan Hanley [mailto:dan@magus.co.uk]
	> Sent: Friday, May 30, 2003 11:47 AM
	> To: OJB Users List
	> Subject: RE: Limited collection returned
	>
	>
	> John
	> Setting auto-retrieve = "false" works for me using JBoss & mySQL *except*
	> that then I don't get any dependant ojbects loaded :-(
	>
	>
	> -----Original Message-----
	> From: McCaffrey, John G. [mailto:John.McCaffrey@kraft.com]
	> Sent: 30 May 2003 17:45
	> To: 'OJB Users List'
	> Subject: RE: Limited collection returned
	>
	>
	> I have been having the same problem. It seems like the initial query
	> actually gets all the rows, but the RSIterator only gives you one at a
	time.
	> In my situation if I  have 4 rows that match the query, and I execute the
	> query once, I only get one row, each additional time I execute the query I
	> get one more row (all previous rows are also returned in the collection).
	> This is only happening for a referenced collection, all of my other
	queries
	> are working fine.  I have no Idea what the deal is, I really hope that
	> someone can help you.
	>
	> -John
	>
	> -----Original Message-----
	> From: Ken Dempster [mailto:kdempster@visionsolutions.com]
	> Sent: Friday, May 30, 2003 11:38 AM
	> To: ojb-user@db.apache.org
	> Subject: Limited collection returned
	>
	>
	> Most everything works except I only get one out of the know four row
	> objects from the table in my collection.  I want to get all the row
	> objects in the table.  My question is why am I only getting only one row
	> object?  I am not sure what I am doing something wrong.
	>
	> Here is how I have things setup.  I have set jboss 3.2 as suggested in
	> the deployment section of the documentation and have jboss configured it
	> with data source to connect to a DB2 database.  I am requesting a
	> collection from a client to a SessionBean that delegates to a
	> PersistenceBroker instance.   Basicly I am using the code in
	> PersistenceBrokerBean as a template for my EJB.  I do generate my own
	> JdbcConnectionDescriptor and pass it to the ConnectionRepository instead
	> of using the repository.xml to define my JdbcConnectionDescriptor.
	>
	> My query looks as follows:
	> Query query = new QueryByCriteria(Runner.class, null);
	>
	> Collection list =
	> getPersistenceBrokerRemote().getCollectionByQuery(query);
	>
	>
	> My ClassDescriptor of the collection of objects I am trying to get is
	> defined in the repository_user.xml as follows :
	>
	> <class-descriptor class="test.ojb.Runner" table="KENLIB.RUNNER">
	>
	> <field-descriptor name="m_id" column="ID" jdbc-type="INTEGER"
	> primarykey="true" autoincrement="true"/>
	>
	> <field-descriptor name="m_name" column="NAME" jdbc-type="VARCHAR"/>
	>
	> <collection-descriptor name="m_times" element-class-ref="test.ojb.Time">
	>
	> <inverse-foreignkey field-ref="m_id"/>
	>
	> </collection-descriptor>
	>
	> </class-descriptor>
	>
	> <class-descriptor class="test.ojb.Race" table="KENLIB.RACE">
	>
	> <field-descriptor name="m_id" column="ID" jdbc-type="INTEGER"
	> primarykey="true" autoincrement="true"/>
	>
	> <field-descriptor name="m_location" column="LOCATION"
	> jdbc-type="VARCHAR"/>
	>
	> <field-descriptor name="m_date" column="DATE" jdbc-type="DATE"/>
	>
	> </class-descriptor>
	>
	> <class-descriptor class="test.ojb.Time" table="KENLIB.RACE_TIME">
	>
	> <field-descriptor name="m_id" column="ID" jdbc-type="INTEGER"
	> primarykey="true" autoincrement="true"/>
	>
	> <field-descriptor name="m_runner_id" column="RUNNER_ID"
	> jdbc-type="INTEGER"/>
	>
	> <field-descriptor name="m_race_id" column="RACE_ID"
	> jdbc-type="INTEGER"/>
	>
	> <field-descriptor name="m_time" column="TIME" jdbc-type="VARCHAR"/>
	>
	> <reference-descriptor name="m_race" class-ref="test.ojb.Race">
	>
	> <foreignkey field-ref="m_race_id"/>
	>
	> </reference-descriptor>
	>
	> </class-descriptor>
	>
	>
	>
	>
	> Ken Dempster
	> Programmer Analyst
	> Vision Solutions, Inc.
	>
	> 17911 Von Karman Ave,  5th Floor
	> Irvine, CA 92614
	> UNITED STATES
	>
	> Tel: +1 (949) 253-6500
	> Fax: +1 (949) 253-6501
	> Email: kdempster@visionsolutions.com
	> <http://www.visionsolutions.com/>
	> Disclaimer - 5/30/2003
	> The contents of this e-mail (and any attachments) are confidential, may be
	> privileged, and may contain copyright material of Vision Solutions, Inc.
	or
	> third parties. You may only reproduce or distribute the material if you
	are
	> expressly authorized by Vision Solutions to do so. If you are not the
	> intended recipient, any use, disclosure or copying of this e-mail (and any
	> attachments) is unauthorized. If you have received this e-mail in error,
	> please immediately delete it and any copies of it from your system and
	> notify us via e-mail at helpdesk@visionsolutions.com
	>
	>
	> ---------------------------------------------------------------------
	> 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
	>
	>
	
	---------------------------------------------------------------------
	To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
	For additional commands, e-mail: ojb-user-help@db.apache.org