The need is simple : get trees of partially valuated business object instances from the "big graph" of possible linked business classes. The fact came from old SQooL (a bad IT joke from old school and old SQL) :
1. only get back from DB what you need.
2. the other thing is to try to make as few trip to the DB as possible. One request is better than several.
DB will optimized if the request look like complex.
In other words, let the DB optimize for you, as much as possible.

So, I'm in Java, I want instances of my business classes but with only attributes I need (rule 1). That attributes that had to be taken or left from the DB can be @Basic one or any other relational one like @ManyToOne, @OneToOne, ...
I also want to express that in one request ideally (point 2).
I let the Java framework optimize for me and send as few SQL request as possible.

Basically, there is 2 "filters" to distinguish :
* vertical one that can filter several "lines" from the million in the table : this is the WHERE clause * horizontal one that can bring back only certain column : this is the SELECT clause
both are usefull.

Vertical one are well taken into account by all the frameworks I had to use.

Horizontal one had been poorly taken into account by other frameworks I had to use. I can get back with some instances (vertical filter) but with all attributes (bad horizontal filter). Or I can have both working but the result is an array of hash tables and I need instances of my business classes. This is really bad since that hash map's keys are not the attribute (field) name but the position in the SELECT clause !
Meta information is just lost in translation and nobody care :-)

Some framework are able to handle poorly (better than not handling at all) horizontal filtering via eager or lazy loading but this only concern relational attributes excluding @Basic one and also, most of the time this can't be set dynamicaly and you have to provide as a developper specific constructor of your business class. All that horizontal filtaring has to be set statically via annotation or more painfully via XML but not dynamically. At the end, it is a lot of work for the developper for not having real horizontal filter.

As a conclusion, and as far as I know, OpenJPA was the only one able to give me back some (efficient vertical filter) instances of my business classes partially valuated depending on my needs (efficient horizontal filter) both filters can be specified entirely dynamically if I want but it is also statically via annotation.
This had been possible with only one request.

Without any reference to an old OO DB, OpenJPA is a precious gemstone !

On Aug 5, 2009, at 15:36 , Pinaki Poddar wrote:


Hi,
I can tell OpenJPA rocks, what I did had been tested impossible to do with
other frameworks.

Good to know that you found OpenJPA useful.

Will you please elaborate which aspects/features of OpenJPA are distinct
from other frameworks in your view?





-----
Pinaki
--
View this message in context: 
http://n2.nabble.com/Custom-proxy-%3A-idea-review-needed-tp3376839p3391748.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.


Reply via email to