Wildermarkes, então, como você percebeu seu problema é com JPA e não JSF. Como seu projeto é muito específico, achei excelente você ter postado no GUJ. Lá o pessoal gosta mesmo de se debruçar em problemas como o seu.
Porém, problemas como esse específicos do seu projeto não são resolvidos apenas olhando classes.. há várias coisas envolvidas.
Aqui no Alura a gente tenta ajudar sempre que possível, mas como disse, o GUJ é o lugar perfeito, aberto e que zilhões de devs podem olhar o seu código.
Para não deixá-lo sem uma resposta, quando você usa @GeneratedValue sem definir a estratégia de geração de ID no banco, o Provider do JPA (no seu caso Hibernate) escolherá a estratégia que ele achar melhor. Nem sempre é o que queremos.
Uma maneira neutra e genérica que você não terá dor de cabeça seja lá qual banco for é usar estratégia TABLE.
Você pode consultar a documentação JPA ou acessar esse link que tem uma explicação razoável:
http://www.summa-tech.com/blog/2011/07/29/setting-up-sequential-ids-using-jpa-tablegenerator
Espero ter ajudado. Quando algum hacker de projeto tirar sua dúvida lá, não deixe de postar aqui a solução.