JPA - Não quero gerar Id automaticamente

185 views
Skip to first unread message

andre girao

unread,
Jan 26, 2016, 11:37:13 AM1/26/16
to disc...@cejug.java.net, ce...@googlegroups.com
Senhores,

Preciso saber se existe alguma forma do JPA não gerar o ID Automaticamente, estou usando o banco Postgres, e já tenho tanto  tabelas quanto sequences criadas e quero deixar essa tarefa para o banco.

como posso fazer para ele não gerar ? 

Exemplo da minha entidade Grupo : 

        @Id
private Long id;
@Column(name="codigo")
private String codigo;
@Column(name="descricao")
private String descricao;





André Lima Girão
Oracle Certified Professional, Java SE 6 Programmer 
CellPhone: (085) - 87052585 

"Porque onde estiver o teu tesouro, ai estará também o teu coração"
Mateus 6:21

Analista de Sistemas Web/Mobile

unread,
Jan 26, 2016, 11:39:47 AM1/26/16
to ce...@googlegroups.com
@Entity
@Table(name="t_batida", schema="e_ponto")
@SequenceGenerator(name="seq_batida", sequenceName="e_ponto.seq_batida", initialValue=1, allocationSize=1)
public class Batida
  implements Serializable
{

Paulo Jr.

unread,
Jan 26, 2016, 11:40:16 AM1/26/16
to disc...@cejug.java.net, ce...@googlegroups.com
Oi André, 

Basta colocar o nome da sequence para que o JPA possa identificar:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="geradorDaSequence")
@SequenceGenerator(allocationSize=1, name="geradorDaSequence", sequenceName="nomeDaSequence")
private Long id;

Abraço


--
-- Você está inscrito na lista de discussão técnica do CEJUG. Para sair da lista de discussão, envie um email para cejug+un...@googlegroups.com.
---
Você recebeu essa mensagem porque está inscrito no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Paulo Alves Junior
Github: http://github.com/paulojribp
Instrutor - Caelum | Ensino e Inovação

Rafael Ponte

unread,
Jan 26, 2016, 11:42:11 AM1/26/16
to disc...@cejug.java.net, ce...@googlegroups.com
Pessoal já deu as soluções aqui. 

Engraçado que quando li o título do email imaginei o contrário, rs :-)
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

Paulo Jr.

unread,
Jan 26, 2016, 11:45:44 AM1/26/16
to disc...@cejug.java.net, ce...@googlegroups.com
Eu também Ponte rsrs .. só quando li o e-mail entendi o que era kkkkk

Programador Java

unread,
Jan 26, 2016, 11:45:47 AM1/26/16
to ce...@googlegroups.com, disc...@cejug.java.net
O titulo ficou estranho mesmo, a princípio pensei que ele não quisesse que o ID fosse gerado automaticamente, e sim por ele mesmo. Enfim...

Como está usando Postgres se você mapear assim: @GeneratedValue(strategy = GenerationType.AUTO), as sequences são criadas automaticamente.

É só uma outra forma.

Paulo Jr.

unread,
Jan 26, 2016, 11:52:13 AM1/26/16
to ce...@googlegroups.com, disc...@cejug.java.net
O problema de mapear com AUTO (Programador Java), é que o Hibernate pode entender que o banco não usa sequence e gerar uma tabela de sequence própria, o que geraria mais IO no banco e que também seria um único controle de ID para todas as tabelas do banco.

Não lembro o caso em que ele cria essa tabela, só lembro que pode ocorrer.

Abraço

andre girao

unread,
Jan 26, 2016, 12:01:11 PM1/26/16
to ce...@googlegroups.com
Pessoal, 

foi mal pelo título rsrsr, mais deu certo aqui valeu !!!!


André Lima Girão
Oracle Certified Professional, Java SE 6 Programmer 
CellPhone: (085) - 87052585 

"Porque onde estiver o teu tesouro, ai estará também o teu coração"
Mateus 6:21




Date: Tue, 26 Jan 2016 14:45:42 -0200
Subject: Re: [CEJUG] JPA - Não quero gerar Id automaticamente
From: programa...@gmail.com
To: ce...@googlegroups.com
CC: disc...@cejug.java.net

Rafael Ponte

unread,
Jan 26, 2016, 12:02:25 PM1/26/16
to ce...@googlegroups.com, disc...@cejug.java.net
Oi,

O Paulo está certo, o modo AUTO deixa a critério do provedor (neste caso o Hibernate) para decidir qual estratégia utilizar. Normalmente ele faz isso de acordo com o banco de dados. Mesmo que ele decida usar SEQUENCE esta será global, isto é, uma única sequence para todo o banco (o que necessariamente não é ruim dependendo da sua aplicação).

Programador Java

unread,
Jan 26, 2016, 12:16:10 PM1/26/16
to ce...@googlegroups.com, disc...@cejug.java.net
Correto, o hibernate gera uma sequencie chamada "hibernate_sequence" que funciona para o sistema inteiro.

Flavio Cysne

unread,
Jan 26, 2016, 1:26:31 PM1/26/16
to ce...@googlegroups.com

No PostgreSQL eu estou usando o campo do id como Serial ou BigSerial; usando no Java, Integer ou Long, respectivamente. E nas entidades JPA estou usando o GenerayedValue como IDENTITY.  Isso, para mim, foi suficiente para os IDs serem autógrafos pelo banco.

Flavio Cysne

unread,
Jan 26, 2016, 1:30:51 PM1/26/16
to ce...@googlegroups.com

No PostgreSQL eu estou usando o campo do id como Serial ou BigSerial; usando no Java, Integer ou Long, respectivamente. E nas entidades JPA estou usando o GeneratedValue como IDENTITY.  Isso, para mim, foi suficiente para os IDs serem autogerados pelo banco. *** reenviando ***

Flavio Cysne

unread,
Jan 27, 2016, 12:13:41 PM1/27/16
to ce...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages