Hi,

I just found strange behavior while executing

        Query q=entityManager.createNativeQuery(
                "execute spTree_getSpecs_v2 @p_PARTY_ID=?1," +
                " @p_GRANT=?2, @p_GROUP_ID=?3, @p_BRAND_ID=?4,
@p_VENDOR_ID=?5, " +
                "@p_ORDER=?6, @p_BEGIN=?7, @p_END=?8");

                q.setParameter(1, null);
                q.setParameter(2, "CLIENT");
                q.setParameter(3, new Long(1007));
                q.setParameter(4, null);
                q.setParameter(5, null);
                q.setParameter(6, new Long(1));
                q.setParameter(7, new Long(0));
                q.setParameter(8, new Long(29));
                System.out.println(q.getResultList().size());

OpenJPA return an exception

[18.09.07 8:12:49:955 MSD] 00000023 WebApp        E   [Servlet
Error]-[/index2.jsp]: <0.0.0 nonfatal user error>
org.apache.openjpa.persistence.InvalidStateException: Cannot perform a
select on update or delete query: "execute spTree_getSpecs_v2
@p_PARTY_ID=?1, @p_GRANT=?2, @p_GROUP_ID=?3, @p_BRAND_ID=?4,
@p_VENDOR_ID=?5, @p_ORDER=?6, @p_BEGIN=?7, @p_END=?8".
    at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:220)
    at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java
:269)
    at com.ibm._jsp._index2._jspService(_index2.java:92)
    at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:85)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(
ServletWrapper.java:989)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(
ServletWrapper.java:501)

instead of result. If I add an object class as a second parameter to
createNativeQuery it works fine (code below works fine)

        Query q=entityManager.createNativeQuery(
                "execute spTree_getSpecs_v2 @p_PARTY_ID=?1," +
                " @p_GRANT=?2, @p_GROUP_ID=?3, @p_BRAND_ID=?4,
@p_VENDOR_ID=?5, " +
                "@p_ORDER=?6, @p_BEGIN=?7, @p_END=?8", Object.class);

                q.setParameter(1, null);
                q.setParameter(2, "CLIENT");
                q.setParameter(3, new Long(1007));
                q.setParameter(4, null);
                q.setParameter(5, null);
                q.setParameter(6, new Long(1));
                q.setParameter(7, new Long(0));
                q.setParameter(8, new Long(29));
                System.out.println(q.getResultList().size());

So, what is the difference between
entityManager.createNativeQuery(String sql) and
entityManager.createNativeQuery(String sql, Class clazz) ?

Reply via email to