openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rahul Thakur <rahul.thakur.x...@gmail.com>
Subject Re: Using query hints for mapping extensions in orm.xml
Date Mon, 15 Jan 2007 23:10:41 GMT

I think this is the way to do it. Isn't this what the QueryHints are 
intended to do - to allow vendor specific query extensions to hook in :-)

Cheers,
Rahul


Marc Prud'hommeaux wrote:
> OpenJPA people-
>
> A limitation of the JPA specification is that there is no built-in way 
> to put implementation-specific extensions in an orm.xml file, which 
> limits the use of OpenJPA's many useful extensions to only being 
> expressible annotations. Past suggestions for getting around this 
> limitation have been to alter the locally-cached version of the XSD 
> (which would make any orm.xml file that takes advantage of this 
> non-portable) or to have an additional file that contains the 
> extensions (e.g., an "openjpa-orm.xml" file peered with the "orm.xml" 
> file).
>
> It just occurred to me that there is another possibility: the "hint" 
> child of the "named-query" element is a free-form field that acts as a 
> means to pass a query hint to the implementation. We could expand on 
> this to allow the passing of a mapping hint to the implementation via 
> a special-cased "openjpa.extensions.EntityName" named query in which 
> we could embed hints for the entity and its attributes. See the 
> example below for how it might work.
>
> What do people think? It would allow us to keep the extensions in the 
> same file in which the rest of the mappings are expressed, but still 
> remain portable to other JPA implementations (since other 
> implementations are supposed to ignore unrecognized query hints).
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
> version="1.0">
>     <package>org.apache.openjpa.mappingextensions</package>
>
>     <entity name="Department" class="Department">
>         <table name="DEPARTMENT"/>
>
>         <!-- OpenJPA mapping extensions for the Department entity -->
>         <named-query name="openjpa.extensions.Department">
>             <!-- empty query element, since it is required -->
>             <query/>
>
>             <!-- class-level hints -->
>             <hint name="openjpa.data-cache" value="false"/>
>
>             <!-- hints for the "employees" field -->
>             <hint name="openjpa.employees.jdbc-eager-fetch-mode" 
> value="parallel"/>
>             <hint name="openjpa.employees.jdbc-nonpolymorphic" 
> value="true"/>
>         </named-query>
>
>         <!-- standard mappings follow -->
>         <attributes>
>             <id name="id">
>                 <column name="ID"/>
>             </id>
>             <basic name="name">
>                 <column name="NAME"/>
>             </basic>
>             <one-to-many name="employees" fetch="EAGER">
>                 <join-column name="FK_EMPS"/>
>             </one-to-many>
>         </attributes>
>     </entity>
> </entity-mappings>
>
>
>
>
>

Mime
View raw message