Jpa - auto increment

galera, estou atuando num projeto que utiliza jpa…

temos uma tabela que possui uma pk que não eh auto-increment. Porém eu necessito que ela seja auto-increment, como eu faço para o jpa fazer auto_increment sem mudar a tabela no banco de dados???

tipo assim:

minha tabela não tem auto increment,

porém eu faço alguma coisa para que seja gerado um codigo automaticamente na hora de inserir…

o jeito é vc criar um controle externo… pode fazer com uma sequence e então usa @SequenceGenerator

assim o controle fica na sequence e o jpa pega da sequence para usar

eis a questão… eu não posso criar nenhuma tabela, nem alterar as já existentes…

atualmente eu estou consultando o ultimo registro e alocando à variavel… + pode ocorrer de 2 resgistros serem inclusão ao mesmo tempo … ai já viu neh… duplicate entry

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = “id”)
private Integer id;

tenta esse carinha @GeneratedValue(strategy = GenerationType.IDENTITY)

eu não falei para vc criar nenhuma tabela…

se vc quer dizer que não pode criar nada no banco… nada mesmo… bom ai não posso te ajudar.

@nextuser
nem fala kra… num entendo isso…

@leomello
vou tentar

ai a JPA num pode fazer nada.

se vc não pode alterar o campo para auto increment deve ser porque já tem dados lá. agora se vc não pode fazer isso, porque simplesmente disseram que não podia, peça argumentos válidos.

faça testes antes de uma alteração como essa.

agora… uma maneira que existe é uma POG pra esse caso específico:

ou ainda fazer o que o colega citou uma Sequence.

POG solution:

Consulta pelo maior valor da PK e atribui valor+1 ao seu novo objeto.

[quote=Z]POG solution:

Consulta pelo maior valor da PK e atribui valor+1 ao seu novo objeto.

[/quote]

isso pode ser um problema, deve cuidar com a concorrencia ao levar em conta varias consultas simultaneas…

[quote=els1234]galera, estou atuando num projeto que utiliza jpa…

temos uma tabela que possui uma pk que não eh auto-increment. Porém eu necessito que ela seja auto-increment, como eu faço para o jpa fazer auto_increment sem mudar a tabela no banco de dados???

tipo assim:

minha tabela não tem auto increment,

porém eu faço alguma coisa para que seja gerado um codigo automaticamente na hora de inserir…[/quote]

Se estiver usando hibernate, pode fazer isso:

	@Id
	@GenericGenerator(name="nome_interno_do_gerador_de_id", strategy="org.hibernate.id.IncrementGenerator")
	@GeneratedValue(generator="nome_interno_do_gerador_de_id")
	@Column(name="nome_campo_id")
	private int id;

Na prática, o que o Hibernate vai fazer é um select max(id) from tabela e acrescentar mais um.
Porém, como o amigo acima disse, é preciso controlar a concorrência entre as solicitações.