Hi Jerry,
  I hope I am not hijacking the thread's original topic....

  The provision to allow function() expression in Criteria API was to
accommodate database functions. Not sure why you qualified its location as
"a rather unexpected place". JPA Expert group roughly spent 30-40% of total
deliberation time during JPA 2.0 on how to add a "type-safe" query
mechanics. Criteria API was the crown jewel of JPA 2.0 and expanding
string-based, fixed-grammar JPQL in whichever way was its raison d'ĂȘtre.

Of course, by adding a new function() expression only covers a small portion
of what the original poster wished for a JPA provider to accommodate in
terms of datastore functionality. But in so doing, the original poster
perhaps placed an expectation on JPA that is quite contrary to its
"philosophy". 

JPA wants the developer (who loves his objects so much) to shield from the
database/foreign key/schema/SQL/triggers... In fact, another similar
specification that did influence JPA in a prominent way were not even
committed to a relational database and postulated object persistence on
*any* datastore. I am not arguing whether such effort to shield the database
details from the application programmer is "good" or "bad" -- but it exists
as a school of thought in technical community -- and JPA primarily addresses
that segment/sentiment.

However, the opposing school that states - "you can not get anything
meaningful done about persistence, unless you directly control/manipulate
the schema and data, or more precisely, set based data"  -- is a significant
voice and emboldened by the long reigning power of SQL. A realistic spec
such as JPA can not see the light of the day without catering to that
segment either. Hence this "design by committee" API where 
    createNativeQuery(String sql) 
coexists with
    createQuery(CritriaQuery stronglyTypedQuery)

Another recent poster in this forum asked : "Can the result of native SQL
query be cached in L2 cache?" 
The users want good of both worlds -- a strongly-typed, object-oriented data
as well as power of relational database/SQL -- but a spec that aspires to be
"all things to all people" may end up satisfying none. 
  In my view, it is better to ask: Is an object-oriented, strongly-typed
view that hides access to underlying data model is right for my
application's need? 
  And if the answer is yes, then choose JPA. 

But coming back to original question of the poster, I will like to mention
that OpenJPA architecturally makes a clean separation between object
management and database interaction via its StoreManager interface -- a
separation so distinct that OpenJPA kernel does not even depend or assume
that the underlying database is relational or JDBC-aware. Such a decision by
original OpenJPA architects is one of its core strength. In the context of
the original question on this thread, Storemanager is the right place to
explore how to leverage specific database functions within OpenJPA runtime. 


 

 

  

  



-----
Pinaki 
-- 
View this message in context: 
http://openjpa.208410.n2.nabble.com/JPA-for-portable-database-management-tp5134215p5136808.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to