private boolean canDoNameParameterBinding(Type hibernateType) { final ExtractedDatabaseMetaData databaseMetaData = procedureCall.getSession() .getJdbcCoordinator() .getJdbcSessionOwner() .getJdbcSessionContext() .getServiceRegistry().getService( JdbcEnvironment.class ) .getExtractedDatabaseMetaData(); return databaseMetaData.supportsNamedParameters() && ProcedureParameterNamedBinder.class.isInstance( hibernateType ) && ((ProcedureParameterNamedBinder) hibernateType).canDoSetting(); }
@Test @TestForIssue( jiraKey = "HHH-10515" ) public void testNoJdbcMetadataDialectOverride() { final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySetting( "hibernate.temp.use_jdbc_metadata_defaults", "false" ) .applySetting( AvailableSettings.DIALECT, TestDialect.class.getName() ) .build(); JdbcEnvironment jdbcEnvironment = serviceRegistry.getService( JdbcEnvironment.class ); ExtractedDatabaseMetaData extractedDatabaseMetaData = jdbcEnvironment.getExtractedDatabaseMetaData(); assertNull( extractedDatabaseMetaData.getConnectionCatalogName() ); assertNull( extractedDatabaseMetaData.getConnectionSchemaName() ); assertTrue( extractedDatabaseMetaData.getTypeInfoSet().isEmpty() ); assertTrue( extractedDatabaseMetaData.getExtraKeywords().isEmpty() ); assertTrue( extractedDatabaseMetaData.supportsNamedParameters() ); assertFalse( extractedDatabaseMetaData.supportsRefCursors() ); assertFalse( extractedDatabaseMetaData.supportsScrollableResults() ); assertFalse( extractedDatabaseMetaData.supportsGetGeneratedKeys() ); assertFalse( extractedDatabaseMetaData.supportsBatchUpdates() ); assertFalse( extractedDatabaseMetaData.supportsDataDefinitionInTransaction() ); assertFalse( extractedDatabaseMetaData.doesDataDefinitionCauseTransactionCommit() ); assertNull( extractedDatabaseMetaData.getSqlStateType() ); assertFalse( extractedDatabaseMetaData.doesLobLocatorUpdateCopy() ); StandardServiceRegistryBuilder.destroy( serviceRegistry ); }
@Test @TestForIssue( jiraKey = "HHH-10515" ) public void testNoJdbcMetadataDefaultDialect() { final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySetting( "hibernate.temp.use_jdbc_metadata_defaults", "false" ) .build(); JdbcEnvironment jdbcEnvironment = serviceRegistry.getService( JdbcEnvironment.class ); ExtractedDatabaseMetaData extractedDatabaseMetaData = jdbcEnvironment.getExtractedDatabaseMetaData(); assertNull( extractedDatabaseMetaData.getConnectionCatalogName() ); assertNull( extractedDatabaseMetaData.getConnectionSchemaName() ); assertTrue( extractedDatabaseMetaData.getTypeInfoSet().isEmpty() ); assertTrue( extractedDatabaseMetaData.getExtraKeywords().isEmpty() ); assertFalse( extractedDatabaseMetaData.supportsNamedParameters() ); assertFalse( extractedDatabaseMetaData.supportsRefCursors() ); assertFalse( extractedDatabaseMetaData.supportsScrollableResults() ); assertFalse( extractedDatabaseMetaData.supportsGetGeneratedKeys() ); assertFalse( extractedDatabaseMetaData.supportsBatchUpdates() ); assertFalse( extractedDatabaseMetaData.supportsDataDefinitionInTransaction() ); assertFalse( extractedDatabaseMetaData.doesDataDefinitionCauseTransactionCommit() ); assertNull( extractedDatabaseMetaData.getSqlStateType() ); assertFalse( extractedDatabaseMetaData.doesLobLocatorUpdateCopy() ); StandardServiceRegistryBuilder.destroy( serviceRegistry ); }
@Override public ResultSet extractResultSet( CallableStatement callableStatement, SharedSessionContractImplementor session) { final boolean supportsNamedParameters = session.getJdbcServices() .getJdbcEnvironment() .getExtractedDatabaseMetaData() .supportsNamedParameters(); final boolean useNamed = supportsNamedParameters && jdbcParameterName != null; if ( useNamed ) { return session.getFactory() .getServiceRegistry() .getService( RefCursorSupport.class ) .getResultSet( callableStatement, jdbcParameterName ); } else { return session.getFactory() .getServiceRegistry() .getService( RefCursorSupport.class ) .getResultSet( callableStatement, jdbcParameterPosition ); } } }