Lock com postgres

olá pessoal,

o meu caso:

  1. tenho uma tabela de usuarios num bd no postgres…
  2. o ID do usuário é do tipo serial…
  3. eu fazia um select pra saber qual era o máximo anterior e ao salvar assumia que era o próximo id…

código abaixo:

ResultSet rs; Statement stm = SingletonStm.getInstance().getStatement(); rs = stm.executeQuery("select max(id) as maximo from clientes"); Integer id = new Integer(0); while (rs.next()){ id = new Integer(rs.getInt("maximo")+1); } stm.executeUpdate(SQLs.inserirCliente(cliente.getRazaoSocial(), cliente.getNomeFantasia(), cliente.getNomeReduzido(), cliente.getCnpj(), cliente.getIe(), cliente.getEndereco(), cliente.getBairro(), cliente.getCidade(), cliente.getUfId(), cliente.getCep(), cliente.getTel1(), cliente.getTel2(), cliente.getFax(), cliente.getEmail(), cliente.getContato(), cliente.getSite(), cliente.getCarater(), cliente.getRamoId(), cliente.getSituacao(), cliente.getObs()));

isso funcionava para um cliente só, mas agora poderão existir mais de um acesso ao banco de uma mesma vez.

notas: tanto o Connection quanto o Statement eu pego por meio de Singleton.

uma pequena dúvida:
como faço pra saber qual o id do usuário foi inserido no banco?
pesquisei um pouco, mas num entendi direito qual o LOCK que é indicado pro meu caso…
estou pensando em inserir o usuario e dar um "SELECT MAX(id) FROM USUARIOS"
mas pra isso preciso garantir que ninguem mais ira inserir ninguem nesse espaço de tempo…

obrigado.

assim ó:
fiz um teste com 2 consoles abertos e funcionou bem:

no 1º console:
BEGIN WORK;
LOCK TABLE usuarios;
INSERT INTO usuarios …;
SELECT MAX(id) FROM usuarios;
COMMIT WORK;

no 2º console fiz o mesmo sendo que qualquer comando em cima da tabela ficou esperando o “COMMIT WORK;” do 1º console…

agora vai a dúvida: como faço isso no JAVA?