> > I am extremely new to OJB. But something I was wondering
> > regarding using the
> > PB API is whether or not you can select the particular field
> > (attribute) you
> > want returned. For example, i have a sql statement like such
> > SELECT ID,
> > FIRSTNAME, LASTNAME FROM PEOPLE WHERE ID=2. The PEOPLE table actually
> > contains the following fields: ID, FIRSTNAME, LASTNAME, ADDRESS, CITY,
> > STATE, ZIP, NOTES. In OJB PB it seems that all i can do is
> > the equivalent of
> > SELECT * FROM PEOPLE WHERE... I don't want to select all (*)
> > the fields
> > everytime. In the afformentioned sql statement i want to just
> > produce a list
> > of People objects that have only the id, firstname and
> > lastname variables
> > populated. Am i missing something
>
> Yes!
>
> 1. OJB does *not* perform "select * from", for queries!
> If you look up objects of class x OJB will read the class-descriptor for
> class x and determine all necessary columns to materialize an x instance.
> The performed select contains all those columns.
>
> If you want to limit the number of columns you can modify the
> class-descriptor for class X do get a reduced number of columns.

Idea: It would be great if one did not need to modify the class-descriptor
as this will influence code
that needs to have the "full" person :)

How about letting one at runtime state that: "yes, i want to load a class X,
but hey - I only have THESE FIELDS in THIS STATEMENT to give you - the rest
you should just 'forget'"

e.g. (pseudo-code)
q = new Query("SELECT ID, FIRSTNAME, LASTNAME FROM PEOPLE WHERE ID=2");
q.setWantedClass(Person.class);
q.limitToField(new String[] = {"ID", "FIRSTNAME", "LASTNAME"});

Now when using the query q, the objects returned are true Persons, but the
fields NOT listed in limitToField are simply not filled in.

One might introduce a variable on such "partial" objects that state which
fields are not available or simply just stating "this is not a complete
object" - This variable should be stated in the repository.xml file.

Just the fact that one can write a sql statement that is used for creating
objects from instead of always loading them from the stated table is a great
force (in my opinion)

Just a thought...

/max

> 2. OJB does have a ReportQuery concept. ReportQueries do not generate
> collections of fully materialized entity objects, but a Simple tabular
> representation of resultsets.
>
> You can use PersistenceBroker.getReportQueryIteratorbyQuery(q) do iterate
> over a query resultset.
> You can also combine ReportQueries with QueryBySql Queries to perform
> arbitrary freeform SQL.
>
>
> > or is this just not
> > possible apart from
> > using a sql statement call from the PB API's QuerBySQL (if
> > that would even
> > work cuz i haven't tested it). If i can't be selective about
> > the data that
> > populates my People object then I will produce a lot of
> > unecessary data
> > collection and population from the database to my objects.
> > Especially if the
> > NOTES field can contain 250k of data (an exaggeration of
> > course but the
> > point is there). The thing that attracted me to OJB was how
> > easy it is to
> > code to a database with OO patterns. I hope the solution
> > isn't something
> > that requires me to write some kind of extra class each time
> > i want to limit
> > what is populated in my People class or require me to create
> > a whole new
> > class to handle just the listing of the basic people info.
>
> This would be a third solution, but as there are two others it's not
> mandatory...
>
> cheers,
> Thomas
>
> > Thanks,
> > Brandon Goodin
> > Phase Web and Multimedia
> > P (406) 862-2245
> > F (406) 862-0354
> > [EMAIL PROTECTED]
> > http://www.phase.ws
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
> > <mailto:[EMAIL PROTECTED]>
> >
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>


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

Reply via email to