@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 @TestForIssue(jiraKey = "HHH-12138") public void testSysRefCursorAsOutParameter() { doInJPA( this::entityManagerFactory, entityManager -> { StoredProcedureQuery function = entityManager.createNamedStoredProcedureQuery( "singleRefCursor" ); function.execute(); Integer value = (Integer) function.getSingleResult(); assertFalse( function.hasMoreResults() ); assertEquals( Integer.valueOf( 1 ), value ); } ); }
@Override public Object getSingleResult() { Object singleResult = storedProcedureQuery.getSingleResult(); em.clear(); return singleResult; }
@Override public Object getSingleResult() { try { return underlyingStoredProcedureQuery.getSingleResult(); } finally { underlyingEntityManager.clear(); } }
@Override public Object getSingleResult() { try { return underlyingStoredProcedureQuery.getSingleResult(); } finally { underlyingEntityManager.clear(); } }
@Override public Object getSingleResult() { Object singleResult = storedProcedureQuery.getSingleResult(); em.clear(); return singleResult; }
@Test public void testFunction() { try { doInJPA(entityManager -> { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("fn_count_comments"); query.registerStoredProcedureParameter("postId", Long.class, ParameterMode.IN); query.setParameter("postId", 1L); Long commentCount = (Long) query.getSingleResult(); assertEquals(Long.valueOf(2), commentCount); }); } catch (Exception e) { assertTrue(Pattern.compile("PROCEDURE high_performance_java_persistence.fn_count_comments does not exist").matcher(e.getCause().getCause().getMessage()).matches()); } }
@Test public void testSingleResultDynamicCall() throws Exception { inTransaction( entityManager -> { StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery( SIMPLE_VALUE_PROC ); storedProcedureQuery.registerStoredProcedureParameter( 0, Integer.class, ParameterMode.IN ); storedProcedureQuery.setParameter( 0, 1 ); Number singleResult = (Number) storedProcedureQuery.getSingleResult(); assertThat( singleResult.intValue() ).isEqualTo( 1 ); } ); }
@Test public void testSingleResultDynamicCall() throws Exception { inTransaction( entityManager -> { StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery( SIMPLE_VALUE_PROC ); storedProcedureQuery.registerStoredProcedureParameter( UNIQUE_VALUE_PROC_PARAM, Integer.class, ParameterMode.IN ); storedProcedureQuery.setParameter( UNIQUE_VALUE_PROC_PARAM, 1 ); Number singleResult = (Number) storedProcedureQuery.getSingleResult(); assertThat( singleResult.intValue() ).isEqualTo( 1 ); } ); }
@Test public void testExceptionWhenProcedureDoesNotExist() throws Exception { inTransaction( entityManager -> { thrown.expect( PersistenceException.class ); thrown.expectMessage( "org.hibernate.HibernateException: OGM000093" ); StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery( NOT_EXISTING_PROCEDURE_NAME, Car.class ); storedProcedureQuery.registerStoredProcedureParameter( "param", Integer.class, ParameterMode.IN ); storedProcedureQuery.setParameter( "param", 1 ); storedProcedureQuery.getSingleResult(); } ); }
@Test public void testExceptionWhenProcedureFails() throws Exception { inTransaction( entityManager -> { thrown.expect( PersistenceException.class ); thrown.expectMessage( "org.hibernate.HibernateException: OGM000092" ); StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery( EXCEPTIONAL_PROCEDURE_NAME, Integer.class ); storedProcedureQuery.registerStoredProcedureParameter( "param", Integer.class, ParameterMode.IN ); storedProcedureQuery.setParameter( "param", 1 ); storedProcedureQuery.getSingleResult(); } ); }
@Test @SkipByGridDialect( value = { NEO4J_EMBEDDED, NEO4J_REMOTE }, comment = "Work fine for Neo4j, because function still accepts integer value as a parameter") public void testExceptionWhenUsingNotRegisteredParameter() throws Exception { inTransaction( entityManager -> { thrown.expect( PersistenceException.class ); thrown.expectMessage( "org.hibernate.HibernateException: OGM000095" ); StoredProcedureQuery storedProcedureQuery = entityManager.createStoredProcedureQuery( Car.SIMPLE_VALUE_PROC, Integer.class ); storedProcedureQuery.registerStoredProcedureParameter( INVALID_PARAM, Integer.class, ParameterMode.IN ); storedProcedureQuery.setParameter( INVALID_PARAM, 1 ); storedProcedureQuery.getSingleResult(); } ); }