users@jpa-spec.java.net

[jpa-spec users] [jsr338-experts] Re: StoredProcedure clarification

From: Steve Ebersole <steve.ebersole_at_redhat.com>
Date: Fri, 26 Jul 2013 17:39:04 -0500

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...
>>
>>