Object key = entry.getKey(); if (key instanceof Integer) { entry.setValue(storedProc.getOutputParameterValue((Integer) key)); entry.setValue(storedProc.getOutputParameterValue(key.toString()));
/** * Extracts the output value from the given {@link StoredProcedureQuery}. * * @param storedProcedureQuery must not be {@literal null}. */ @Nullable Object extractOutputValue(StoredProcedureQuery storedProcedureQuery) { Assert.notNull(storedProcedureQuery, "StoredProcedureQuery must not be null!"); if (!procedureAttributes.hasReturnValue()) { return null; } String outputParameterName = procedureAttributes.getOutputParameterName(); JpaParameters parameters = getQueryMethod().getParameters(); return useNamedParameters && StringUtils.hasText(outputParameterName) ? // storedProcedureQuery.getOutputParameterValue(outputParameterName) : storedProcedureQuery.getOutputParameterValue(parameters.getNumberOfParameters() + 1); }
Object key = entry.getKey(); if (key instanceof Integer) { entry.setValue(storedProc.getOutputParameterValue((Integer) key)); entry.setValue(storedProc.getOutputParameterValue(key.toString()));
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("sales_tax"); // set parameters storedProcedure.registerStoredProcedureParameter("subtotal", Double.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter("tax", Double.class, ParameterMode.OUT); storedProcedure.setParameter("subtotal", 1f); // execute SP storedProcedure.execute(); // get result Double tax = (Double)storedProcedure.getOutputParameterValue("tax");
given(emf.createEntityManager()).willReturn(targetEm); given(targetEm.createStoredProcedureQuery("x")).willReturn(query); willReturn("y").given(query).getOutputParameterValue("a"); willReturn("z").given(query).getOutputParameterValue("c"); given(targetEm.isOpen()).willReturn(true); spq.registerStoredProcedureParameter("c", Object.class, ParameterMode.INOUT); spq.execute(); assertEquals("y", spq.getOutputParameterValue("a")); try { spq.getOutputParameterValue("b"); fail("Should have thrown IllegalArgumentException"); assertEquals("z", spq.getOutputParameterValue("c"));
given(emf.createEntityManager()).willReturn(targetEm); given(targetEm.createStoredProcedureQuery("x")).willReturn(query); willReturn("y").given(query).getOutputParameterValue(0); willReturn("z").given(query).getOutputParameterValue(2); given(targetEm.isOpen()).willReturn(true); spq.registerStoredProcedureParameter(2, Object.class, ParameterMode.INOUT); spq.execute(); assertEquals("y", spq.getOutputParameterValue(0)); try { spq.getOutputParameterValue(1); fail("Should have thrown IllegalArgumentException"); assertEquals("z", spq.getOutputParameterValue(2));
@Test @TestForIssue(jiraKey = "HHH-12138") public void testStoredProcedureOutParameter() { EntityManager entityManager = createEntityManager(); entityManager.getTransaction().begin(); try { StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "sp_count_phones" ); query.registerStoredProcedureParameter( 1, Long.class, ParameterMode.IN ); query.registerStoredProcedureParameter( 2, Long.class, ParameterMode.OUT ); query.setParameter( 1, 1L ); query.execute(); Long phoneCount = (Long) query.getOutputParameterValue( 2 ); assertEquals( Long.valueOf( 2 ), phoneCount ); } finally { entityManager.getTransaction().rollback(); entityManager.close(); } }
@Test public void testStoredProcedureOutParameter() { doInJPA( this::entityManagerFactory, entityManager -> { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("sp_count_phones"); query.registerStoredProcedureParameter("personId", Long.class, ParameterMode.IN); query.registerStoredProcedureParameter("phoneCount", Long.class, ParameterMode.OUT); query.setParameter("personId", 1L); query.execute(); Long phoneCount = (Long) query.getOutputParameterValue("phoneCount"); assertEquals(Long.valueOf(2), phoneCount); } ); }
@Test @TestForIssue(jiraKey = "HHH-12138") public void testOutAndSysRefCursorAsOutParameter() { doInJPA( this::entityManagerFactory, entityManager -> { StoredProcedureQuery function = entityManager.createNamedStoredProcedureQuery( "outAndRefCursor" ); function.execute(); Integer value = (Integer) function.getSingleResult(); assertEquals( Integer.valueOf( 1 ), value ); assertEquals( Integer.valueOf( 1 ), function.getOutputParameterValue( 1 ) ); assertFalse( function.hasMoreResults() ); } ); }
@Test public void testStoredProcedureOutParameter() { doInJPA( this::entityManagerFactory, entityManager -> { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("sp_count_phones"); query.registerStoredProcedureParameter(1, Long.class, ParameterMode.IN); query.registerStoredProcedureParameter(2, Long.class, ParameterMode.OUT); query.setParameter(1, 1L); query.execute(); Long phoneCount = (Long) query.getOutputParameterValue(2); assertEquals(Long.valueOf(2), phoneCount); }); }
@Test public void testStoredProcedureOutParameter() { doInJPA( this::entityManagerFactory, entityManager -> { //tag::sql-jpa-call-sp-out-mysql-example[] StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "sp_count_phones"); query.registerStoredProcedureParameter( "personId", Long.class, ParameterMode.IN); query.registerStoredProcedureParameter( "phoneCount", Long.class, ParameterMode.OUT); query.setParameter("personId", 1L); query.execute(); Long phoneCount = (Long) query.getOutputParameterValue("phoneCount"); //end::sql-jpa-call-sp-out-mysql-example[] assertEquals(Long.valueOf(2), phoneCount); }); }
@Test public void testStoredProcedureViaJPA() { doInJPA( this::entityManagerFactory, entityManager -> { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("sp_test.sp_square_number"); query.registerStoredProcedureParameter("inputNumber", Integer.class, ParameterMode.IN); query.registerStoredProcedureParameter("outputNumber", Integer.class, ParameterMode.OUT); query.setParameter("inputNumber", 7); query.execute(); int result = (int) query.getOutputParameterValue("outputNumber"); assertEquals( 49, result ); } ); } }
@Override public Object getOutputParameterValue(int position) { return queryDelegate.getOutputParameterValue(position); }
StoredProcedureQuery query = entityManager .createStoredProcedureQuery("getStatistics") .registerStoredProcedureParameter("A", Long.class, ParameterMode.OUT) .registerStoredProcedureParameter("B", Long.class, ParameterMode.OUT) .registerStoredProcedureParameter("C", Long.class, ParameterMode.OUT); query.execute(); Long a = (Long) query.getOutputParameterValue("A"); Long b = (Long) query.getOutputParameterValue("B"); Long c = (Long) query.getOutputParameterValue("C");
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("plus1"); proc.setParameter("arg", 1); proc.execute(); Integer res1 = (Integer) proc.getOutputParameterValue("res1"); Integer res2 = (Integer) proc.getOutputParameterValue("res2"); ...
StoredProcedureQuery query = entityManager .createStoredProcedureQuery("count_comments") .registerStoredProcedureParameter( "postId", Long.class, ParameterMode.IN) .registerStoredProcedureParameter( "commentCount", Long.class, ParameterMode.OUT) .setParameter("postId", 1L); query.execute(); Long commentCount = (Long) query .getOutputParameterValue("commentCount");
@Override public String compactFeedProcessorStats() { StoredProcedureQuery query = em.createStoredProcedureQuery("compact_feed_processor_stats"); query.registerStoredProcedureParameter("res", String.class, ParameterMode.OUT); query.execute(); String result = (String) query.getOutputParameterValue("res"); return result; } }
StoredProcedureQuery query = getEntityManager().createStoredProcedureQuery("mypackage.myprocedure"); query.registerStoredProcedureParameter("i_input_1", String.class, ParameterMode.IN); query.registerStoredProcedureParameter("o_output_1", String.class, ParameterMode.OUT); query.setParameter("i_input_1", "valueOf_i_input_1"); boolean queryResult = query.execute(); String result = String.valueOf(query.getOutputParameterValue("o_output_1"));
@Test public void testStoredProcedureOutParameter() { doInJPA(entityManager -> { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("count_comments"); query.registerStoredProcedureParameter("postId", Long.class, ParameterMode.IN); query.registerStoredProcedureParameter("commentCount", Long.class, ParameterMode.OUT); query.setParameter("postId", 1L); query.execute(); Long commentCount = (Long) query.getOutputParameterValue("commentCount"); assertEquals(Long.valueOf(2), commentCount); }); }
@Test public void testStoredProcedureOutParameter() { doInJPA(entityManager -> { StoredProcedureQuery query = entityManager .createStoredProcedureQuery("count_comments") .registerStoredProcedureParameter("postId", Long.class, ParameterMode.IN) .registerStoredProcedureParameter("commentCount", Long.class, ParameterMode.OUT) .setParameter("postId", 1L); query.execute(); Long commentCount = (Long) query.getOutputParameterValue("commentCount"); assertEquals(Long.valueOf(2), commentCount); }); }