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 Phil Warrick <ph...@mcgill.ca> on 2003/08/20 20:29:25 UTC
[Re-post] PB query question
Hi again,
I posted this a few weeks ago, perhaps when the best person to answer
wasn't around (Jakob?). Your suggestions would be welcome.
Here is my model:
[A] <1--n> [B] <1--n> [C] <1--1> [D]
| |
C1 C2
I want to query for A objects using a C1 timestamp field as criteria (C1
is a subclass of C and C does not have the timestamp field) and a D
string field as criteria.
If the timestamp field belonged to the C class, then there would be no
problem directly querying for A's.
Since the criteria is a C1 attribute I don't think that I can directly
query for A's, so I can do it in two steps by first querying for C1
objects and then iterating through the returned collection to gather the
A objects, as follows
// snippit begin
Criteria criteria1 = new Criteria();
Criteria criteria2 = new Criteria();
criteria1.addEqualTo("d.stringField", new String("foo"));
criteria2.addEqualTo("d.stringField", new String("foofoo"));
criteria1.addOrCriteria(criteria2);
Criteria criteria3 = new Criteria();
criteria3.addBetween("timeStamp", timeStamp1, timeStamp2);
criteria1.addAndCriteria(criteria3);
Query query = new QueryByCriteria(C1.class, criteria1);
Collection c1Set = broker.getCollectionByQuery(query);
java.util.Iterator itr = c1Set.iterator();
List aList = new ArrayList();
while (itr.hasNext())
{
// gather the A's (more db hits here)
A a = c1.getB().getA();
aList.add(a);
}
// snippit end
It would be nice to reduce the DB hits and query for the A's directly as
is possible in with standard OQL:
select c1.b.a from c1 in C1.class
where (c1.d.stringField = \"foo\" or
c1.d.stringField = \"foofoo\") and
e.theTimestamp >= timestamp '" + timeStamp1 + "' " and
e.theTimestamp <= timestamp '" + timeStamp2 + "' "
Is there any possibility that this is possible with PB queries?
Thanks for read this far,
Phil
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: [Re-post] PB query question
Posted by Jakob Braeuchi <jb...@gmx.ch>.
hi phil,
there have been discussions about defining the fields of the subclasses
in the abstract base class as well. but i do not know the current state :(
you could try to use a path hint (setPathForClass) but this could
conflict with the other extent .
jakob
Phil Warrick wrote:
> Hi again,
>
> I posted this a few weeks ago, perhaps when the best person to answer
> wasn't around (Jakob?). Your suggestions would be welcome.
>
>
> Here is my model:
>
> [A] <1--n> [B] <1--n> [C] <1--1> [D]
> | |
> C1 C2
>
> I want to query for A objects using a C1 timestamp field as criteria (C1
> is a subclass of C and C does not have the timestamp field) and a D
> string field as criteria.
>
> If the timestamp field belonged to the C class, then there would be no
> problem directly querying for A's.
>
> Since the criteria is a C1 attribute I don't think that I can directly
> query for A's, so I can do it in two steps by first querying for C1
> objects and then iterating through the returned collection to gather the
> A objects, as follows
>
> // snippit begin
> Criteria criteria1 = new Criteria();
> Criteria criteria2 = new Criteria();
> criteria1.addEqualTo("d.stringField", new String("foo"));
> criteria2.addEqualTo("d.stringField", new String("foofoo"));
> criteria1.addOrCriteria(criteria2);
>
> Criteria criteria3 = new Criteria();
> criteria3.addBetween("timeStamp", timeStamp1, timeStamp2);
>
> criteria1.addAndCriteria(criteria3);
>
> Query query = new QueryByCriteria(C1.class, criteria1);
> Collection c1Set = broker.getCollectionByQuery(query);
>
> java.util.Iterator itr = c1Set.iterator();
> List aList = new ArrayList();
> while (itr.hasNext())
> {
> // gather the A's (more db hits here)
> A a = c1.getB().getA();
> aList.add(a);
> }
> // snippit end
>
> It would be nice to reduce the DB hits and query for the A's directly as
> is possible in with standard OQL:
>
> select c1.b.a from c1 in C1.class
> where (c1.d.stringField = \"foo\" or
> c1.d.stringField = \"foofoo\") and
> e.theTimestamp >= timestamp '" + timeStamp1 + "' " and
> e.theTimestamp <= timestamp '" + timeStamp2 + "' "
>
> Is there any possibility that this is possible with PB queries?
>
> Thanks for read this far,
>
> Phil
>
>
>
>
> ---------------------------------------------------------------------
> 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