Antes de mais nada, pra dizer a verdade, não sei se o que fiz é o jeito mais correto para essa solução, mas já é uma idéia! 
Primeiro… sempre sigo a filosofia de usar o banco de dados somente para guardar meus objetos… ou seja, não uso qquer função deles.
Então, seguindo a ideia acima, e ainda estudando CMP, resolvi a pendenga de chave primaria incremental com uma classe auxiliar que obtem o mais alto valor existente e retorno o valor + 1 para o meu Stateless (Pattern Facade) que cuida então de “falar” com o meu CMP para criar um novo objeto. Somente nesse momento eu uso create, porque quando vc chama o create é que o objeto é criado… mesmo não passando parâmetro. (foi assim que entendi, por favor alguem me corrija se estiver errada) 
Não testei outra maneira de implementar isso… acredito que se seu banco de dados tiver um campo auto-incremente, ao executar um create, a tupla com o valor da chave-primaria já deve ter sido criada… aí é só passar os outros valores atraves dos sets do seu objeto CMP já criado e pronto. Acho que vale a pena testar essa maneira… se der certo seria menos lusitana do que a minha! 
Espero ter ajudado.
Ah, e caso vc já tenha achado uma solução, por favor, poste que também quero saber. 
Abracos