Using Torque 3.1.1 we have found this strange behaviour:

having three records with

idtessera, price, idproduct
1, 1000, 0
1, 2000, 1
1, 3000, 2

and this piece of code

<snip>
       int price = 0;
       Criteria criteria = new Criteria();
       criteria.add( BaseDtessereinPeer.IDPRODUCT, 0 );
       List in = tessera.getDtessereins( criteria );

       for (int idx = 0; idx < in.size(); idx++)
       {
           Dtesserein dtessera = (Dtesserein) in.get( idx );

           price+= dtessera.getPrice();
       }

      Context.put( "Price",  price )

      Context.put( "FullList", tessera.getDtessereins() );
</snip>

results in

Price = 1000
FullList = only the first record (the one with idtessera = 1)


Since the two calls of tessera.getDtesserein() have different Criteria (the last has Criteria = all record = no criteria), I would espect to get a different list of records (i.e. three records in the latter call to the method). Poking around in the Peer code generated via "maven torque:om" , we have found this:

-----------------------------------------------------
public List getDtessereins() throws TorqueException
   {
       if (collDtessereins == null)
       {
           collDtessereins = getDtessereins( new Criteria( 10 ) );
       }
       return collDtessereins;
   }
----------------------------------------------------

which can be translated to: "if you have already readed the db, never read it again"

We think that the correct code should be:

----------------------------------------------------
public List getDtessereins() throws TorqueException
  {
       Criteria criteria = new Criteria( 10 );
if (collDtessereins == null || !lastDtessereinsCriteria.equals( criteria ) )
       {
           collDtessereins = getDtessereins( criteria );
       }
return collDtessereins; }
----------------------------------------------------

which can bet translated to "if you have already readed the db AND the criteria is unchanged, do not read the db again"

or even better:

----------------------------------------------------
public List getDtessereins() throws TorqueException
   {
return getDtessereins( new Criteria( 10 )); }
----------------------------------------------------

leaving to getDtessereins(Criteria criteria) the control on the equalness of the criteria (control already present in the generated code)



Have we misunderstood the pourpose of getDtessereins() or has it a (subtle) bug ?? Shoul we use getDtessereins( new Criteria( 10 ) ) every time we need the _complete_ list of objects ?


Andrea Papotti
Alchimie Digitali S.r.l.
Italy.





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to