jsr338-experts@jpa-spec.java.net

[jsr338-experts] Re: StoredProcedure clarification

From: gordon yorke <gordon.yorke_at_oracle.com>
Date: Tue, 06 Aug 2013 16:53:16 -0300

Hello Steve,
    I am not sure what you are asking here. In the below example I
would expect a null to be returned from getResultList() as the execute()
call in this case is executing a Stored Procedure where the first result
is an update count. If it was not an update count then the assertion
would fail.
    In response to the other point you are making; no the
IllegalStateException does not apply as the behaviour has been
overridden for StoredProcedureQueries and null should be returned.

--Gordon

On 26/07/2013 7:39 PM, Steve Ebersole wrote:
> And they just keep coming :)
>
> EntityManager em = ...;
> StoredProcedureQuery query = em.createStoredProcedureQuery(...);
> boolean isResults = query.execute();
> // this result is an update count...
> assertFalse( isResults );
> // but lets try to deal with it as a results
> List list = query.getResultList();
>
>
> Neither the spec nor the javadocs for getResultList() directly deals
> with this case. Unless we can interpret "@throws
> IllegalStateException if called for a Java Persistence query language
> UPDATE or DELETE statement" to more broadly apply to any of the nested
> results. Is that the intent?
>
>
> On Fri 26 Jul 2013 05:26:42 PM CDT, Steve Ebersole wrote:
>> Related:
>>
>> EntityManager em = ...;
>> StoredProcedureQuery query = em.createStoredProcedureQuery(...);
>> query.getUpdateCount();
>> query.getUpdateCount();
>> query.getUpdateCount();
>> ...
>>
>> Even say it "does the right thing":
>> StoredProcedureQuery query = em.createStoredProcedureQuery(...);
>> query.execute();
>> query.getUpdateCount();
>> query.getUpdateCount();
>> query.getUpdateCount();
>>
>> Javadoc for getUpdateCount says "Return the update count or -1 if
>> there is no pending result or if the next result is not an update
>> count."
>>
>> The part that bothers me is the "next result" bit. To me that
>> indicates that we are supposed to "move on" to the next result. But
>> say the next logical result is a ResultSet. I guess I am not seeing
>> the consistent way to cycle through the ResultSets/updateCounts if the
>> TCK tests are how this is supposed to work. All these situations are
>> exactly things done in the TCK.
>>
>>
>> On Fri 26 Jul 2013 05:16:44 PM CDT, Steve Ebersole wrote:
>>> EntityManager em = ...;
>>> StoredProcedureQuery query = em.createStoredProcedureQuery(...);
>>> query.getUpdateCount();
>>>
>>> What should happen above when getUpdateCount() is called? The
>>> "result" corollaries (getResultList, getSingleResult) specifically say
>>> that the query will be executed when they are called. getUpdateCount
>>> conspicuously says nothing on the subject. Nor does it call out being
>>> allowed to throw an exception in this case. So should I assume that
>>> getUpdateCount() should just return -1 here?
>>>
>>> Yes, its a silly case, but the TCK does it. Many times...
>>>
>>>