PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

hibernar lote de inserção com postgresql particionado


Você pode tentar usar um Batcher customizado configurando a propriedade hibernate.jdbc.factory_class. Certificar-se de que a hibernação não verificará a contagem de atualização das operações em lote pode corrigir seu problema, você pode conseguir isso fazendo com que seu Batcher personalizado estenda a classe BatchingBatcher e, em seguida, substituindo o método doExecuteBatch(...)
    @Override
    protected void doExecuteBatch(PreparedStatement ps) throws SQLException, HibernateException {
        if ( batchSize == 0 ) {
            log.debug( "no batched statements to execute" );
        }
        else {
            if ( log.isDebugEnabled() ) {
                log.debug( "Executing batch size: " + batchSize );
            }

            try {
//              checkRowCounts( ps.executeBatch(), ps );
                ps.executeBatch();
            }
            catch (RuntimeException re) {
                log.error( "Exception executing batch: ", re );
                throw re;
            }
            finally {
                batchSize = 0;
            }

        }

    }

Observe que o novo método não verifica os resultados da execução das instruções preparadas. Lembre-se de que fazer essa alteração pode afetar a hibernação de maneira inesperada (ou talvez não).