Problemas com Duplicate entry

Pessoal,

estou quebrando a cabeça aqui e tenho certeza de que existe uma forma mais clara de fazer isso mas não estou conseguindo entender…

Tenho uma tabela bem simples:

Cidade {

    @Id
    private String codigo;
    private String descricao;

Só que nesse caso, meu código é fornecido por mim, automaticamente através de um max(codigo) from cidade.

O problema, como podem já perceber, é que :

. Quando eu entro em minha tela, o registro aparece para o cliente, por exemplo - Código Cidade: 100
. Quando o cliente vai tentar gravar esse registro na tabela, pode ocorrer a concorrência de outro usuário já ter gravado essa cidade com o código 100

No caso dessa concorrência, eu tenho a seguinte estrutura de persistência:

        EntityManager em = null;

        try {
            em = MeuJPA.getEntityManager();
            em.getTransaction().begin();
            em.flush();
            em.persist(meuObjeto);

        } catch (Exception ex) {
            //Realiza uma exceção
        } finally {
            em.getTransaction().commit();   
            em.close();                            
        }

O problema é que a exception não ocorre na minha estrutura, dentro do TRY, mas sim quando eu estou executando a linha

Aí ele irá lançar:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '100' for key 'PRIMARY'

Se eu transferir essa linha para dentro do meu try, posso ter problemas da minha transação não ocorrer quando houver ocorrido uma exception, correto?

O que eu faço nesse caso? Abro um novo try…catch dentro do finally?

Ou existe alguma estrutura que eu possa fazer o tratamento desse gerenciamento do atributo código de acordo com a minha regra de max(codigo)+1?