openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: what to expect - jpa spec or impl discretion
Date Tue, 05 Aug 2008 16:44:58 GMT
The spec says in 3.6.1  
"TheelementsoftheresultofaJavaPersistencequerywhoseSELECTclauseconsistsofmorethanone 
  selectexpressionareoftypeObject[]" with apologies to those who  
prefer spaces in sentences.

So the result of a SELECT MIN(e.sequence), MAX(e.sequence) should be  
an Object[] in which the first element is the MIN and the second  
element the MAX.

If you use getResultList, then the result will be a List each element  
of which is an Object[2]. If you call getSingleResult, the result will  
be a single Object[2].

Craig

On Jul 21, 2008, at 10:45 AM, Pinaki Poddar wrote:

>
> Hi,
>> I'm a little confused by your example.  You indicate that OpenJPA is
>> returning an array of Objects?  Did you mean that OpenJPA is  
>> returning a
>> single Object?
>
>  For results of native queries, OpenJPA returns a List. But each  
> member of
> the list can be Object[] depending upon what has been selected by  
> the query
> and @SQLResultSetMapping.
>  For example, a SQL
>     SELECT p.name, p.age FROM PERSON p WHERE p.age > 20
>
>  may select 42 rows. In that case, OpenJPA will return a List of 42
> elements where each element is a Object[] of length 2 with 0-th  
> element
> being p.name and 1-st element is p.age.
>
>
>
>
> Beyer,Nathan wrote:
>>
>> Re: the question about the return type of the native query
>>
>> To clarify, this is what I see in OpenJPA ...
>>
>> // LOG is table name with a 'sequence' column/field of Java type  
>> 'long'
>> final Query query = entityManager.createNativeQuery("SELECT
>> MIN(e.sequence), MAX(e.sequence) FROM LOG e");
>>
>> If you use 'getResultList', then a List is return with one element,  
>> which
>> is an Object[], so to process, you do this.
>> final List result = query.getResultList();
>> final Object[] e0 = (Object[])result.get(0);
>> final Number minSeq = (Number)e0[0];
>> final Number maxSeq = (Number)e0[1];
>>
>>
>> If you use 'getSingleResult', then just the Object[] is returned,  
>> so to
>> process, you do this.
>> final Object result = query.getSingleResult();
>> final Object[] e0 = (Object[])result;
>> final Number minSeq = (Number)e0[0];
>> final Number maxSeq = (Number)e0[1];
>>
>>
>>
>> -----Original Message-----
>> From: Kevin Sutter [mailto:kwsutter@gmail.com]
>> Sent: Monday, July 21, 2008 12:01 PM
>> To: users@openjpa.apache.org
>> Subject: Re: what to expect - jpa spec or impl discretion
>>
>> Nathan,
>> Comments embedded below.  This is just my interpretation of the  
>> spec (I am
>> a
>> member of the JPA expert group, but I am not the lead).  Posting to  
>> the
>> EclipseLink forum might be interesting as well...
>>
>> On Mon, Jul 21, 2008 at 10:15 AM, Beyer,Nathan <NBEYER@cerner.com>  
>> wrote:
>>
>>> I'm trying to write a bit of code that's portable between JPA  
>>> providers
>>> and
>>> ran into a few differences and I'd like to know if they are  
>>> undefined
>>> bits
>>> of the spec or just me doing something silly.
>>>
>>> 1.      0 is considered null for primary key fields (@Id) of type  
>>> int,
>>> long
>>> - OpenJPA DOES NOT do this, but other providers, such as  
>>> EclipseLink do.
>>> Is
>>> this in the spec or up for debate?
>>
>>
>> The spec does not identify valid values for a given annotation or  
>> field
>> type.  But, logic would say that 0 is a valid int or long and, thus,
>> should
>> be allowed as a primary key value.  Of course, you could say that  
>> this
>> wouldn't be a very solid value for a primary key, but it should be  
>> allowed
>> in my book.
>>
>>
>>>
>>> 2.      Return value of native queries is an Object[] or a List -
>>> Consider
>>> the following snippets
>>>
>>>                // LOG is table name with a 'sequence' column/field  
>>> of
>>> Java
>>> type 'long'
>>>       final Query query = entityManager.createNativeQuery("SELECT
>>> MIN(e.sequence), MAX(e.sequence) FROM LOG e");
>>>       final Object result = query.getSingleResult();
>>>
>>>               With OpenJPA a Object[] is returned, in EclipseLink  
>>> a List
>>> is returned. Is this defined anywhere? How can I define it.
>>
>>
>> I'm a little confused by your example.  You indicate that OpenJPA is
>> returning an array of Objects?  Did you mean that OpenJPA is  
>> returning a
>> single Object?  The JavaDoc for getSingleResult is like this:
>>
>> /**
>> * Execute a SELECT query that returns a single result.
>> * @return the result
>> * @throws NoResultException if there is no result
>> * @throws NonUniqueResultException if more than one result
>> * @throws IllegalStateException if called for a Java
>> * Persistence query language UPDATE or DELETE statement
>> */
>> public Object getSingleResult();
>>
>> So, I could see where someone might return a List (since it's an  
>> Object),
>> but returning an array of Objects seems like a stretch.
>>
>> Given that, I would expect the result to be a single Object (not a  
>> List).
>> If I wanted to process a List, then I would call getResultList.  The
>> example
>> usage in the spec also supports this interpretation.
>>
>> Good luck with your comparisons,
>> Kevin
>>
>>
>>>
>>>
>>> Thanks,
>>> -Nathan
>>>
>>> ----------------------------------------------------------------------
>>> CONFIDENTIALITY NOTICE This message and any included attachments  
>>> are from
>>> Cerner Corporation and are intended only for the addressee. The
>>> information
>>> contained in this message is confidential and may constitute  
>>> inside or
>>> non-public information under international, federal, or state  
>>> securities
>>> laws. Unauthorized forwarding, printing, copying, distribution, or  
>>> use of
>>> such information is strictly prohibited and may be unlawful. If  
>>> you are
>>> not
>>> the addressee, please promptly delete this message and notify the  
>>> sender
>>> of
>>> the delivery error by e-mail or you may call Cerner's corporate  
>>> offices
>>> in
>>> Kansas City, Missouri, U.S.A at (+1) (816)221-1024.
>>
>>
>
> -- 
> View this message in context: http://n2.nabble.com/what-to-expect---jpa-spec-or-impl-discretion-tp575285p575455.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Craig L Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message