ok. Tenho várias sugestões
me desculpe a franqueza, mas realmente está muito grosseira esta implementação.
Sempre que implementar, pense em: performance, tráfego de rede , carga no cliente e carga no servidor. Você deve evitar tudo que cause problemas destes tipos.
Por exemplo, carregar a lista inteira da tabela causará carga no servidor e/ou cliente excessiva (alto consumo de memoria) e alto trafego de rede. Então não é uma estratégia boa. Pense se a tabela tivesse 2 milhões de registro, seu software sobreviveria?
Vou te sugerir o seguinte:
1 - implemente um dao que busque por pagina e ponto. Supondo que seja lista de fornecedores:
List dao.buscarFornecedores(filtro, pagina);
Neste metodo voce aplica a dica do postgrees limit e offset
2 - No objeto Fornecedores ou em algum que ele extenda, coloque um atributo enum. Ex.: [Nao Alterado], [Alterado], [Excluido]
Mostre a lista na tela, na pagina que o usuario solicitou. Se ele alterar o registro, marque a enum alterado.
Se ele clicar em apagar o registro, marque a enum como excluido.
3- Quando o cliente clicar em Gravar, percorra a lista … quando encontrar objeto Fornecedor com enum = Alterado , faça update.
Quando encontrar enum = Excluido, exclua o registro.
4- Se o cliente for para a proxima pagina, volte ao item 1.
Se voce quer que o usuario clique em gravar somente apos alterar tudo que ele quer em várias páginas, você ainda pode usar esta técnica. sera apenas mais trabalhoso.